YES(O(1),O(n^5)) We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) We add following dependency tuples: Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#2^#(nil(), @queue') -> c_5() , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , enqueues#1^#(nil(), @queue) -> c_31() , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#3^#(nil()) -> c_25() , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , empty^#(@x) -> c_27() , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() , startBreadth^#(@xs) -> c_32(startBreadth#1^#(@xs)) , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#1^#(nil()) -> c_34() , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } and mark the set of starting terms. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#2^#(nil(), @queue') -> c_5() , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , enqueues#1^#(nil(), @queue) -> c_31() , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#3^#(nil()) -> c_25() , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , empty^#(@x) -> c_27() , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() , startBreadth^#(@xs) -> c_32(startBreadth#1^#(@xs)) , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#1^#(nil()) -> c_34() , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) Consider the dependency graph 1: breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) -->_2 dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) :3 -->_1 breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) :2 2: breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) -->_1 breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) :5 -->_1 breadth#2^#(nil(), @queue') -> c_5() :6 3: dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) -->_1 dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) :4 4: dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) -->_1 dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) :25 -->_1 dequeue#2^#(::(@y, @ys), @inq) -> c_22() :24 5: breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) -->_2 breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) :8 -->_1 breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) :7 6: breadth#2^#(nil(), @queue') -> c_5() 7: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) -->_2 enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) :11 -->_1 breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) :10 8: breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) -->_1 children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) :9 9: children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) -->_1 children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) :15 -->_1 children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) :14 10: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) -->_1 breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) :1 11: enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) -->_1 enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) :12 -->_1 enqueues#1^#(nil(), @queue) -> c_31() :13 12: enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) -->_2 enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) :30 -->_1 enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) :11 13: enqueues#1^#(nil(), @queue) -> c_31() 14: children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) -->_1 children#3^#(nil(), @b, @x, @xs) -> c_14() :17 -->_1 children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() :16 15: children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) -->_1 children#2^#(nil(), @b) -> c_16() :19 -->_1 children#2^#(::(@y, @ys), @b) -> c_15() :18 16: children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() 17: children#3^#(nil(), @b, @x, @xs) -> c_14() 18: children#2^#(::(@y, @ys), @b) -> c_15() 19: children#2^#(nil(), @b) -> c_16() 20: copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) -->_1 copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) :21 21: copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) -->_1 copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) :22 -->_1 copyover#2^#(nil(), @outq) -> c_20() :23 22: copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) -->_1 copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) :20 23: copyover#2^#(nil(), @outq) -> c_20() 24: dequeue#2^#(::(@y, @ys), @inq) -> c_22() 25: dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) -->_1 dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) :26 -->_1 dequeue#3^#(nil()) -> c_25() :27 26: dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) -->_1 dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) :28 -->_2 copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) :20 27: dequeue#3^#(nil()) -> c_25() 28: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) -->_1 dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) :3 29: empty^#(@x) -> c_27() 30: enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) -->_1 enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() :31 31: enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() 32: startBreadth^#(@xs) -> c_32(startBreadth#1^#(@xs)) -->_1 startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) :33 -->_1 startBreadth#1^#(nil()) -> c_34() :34 33: startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) -->_1 startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) :35 -->_2 enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) :30 -->_3 empty^#(@x) -> c_27() :29 34: startBreadth#1^#(nil()) -> c_34() 35: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) -->_1 breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) :1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). { startBreadth^#(@xs) -> c_32(startBreadth#1^#(@xs)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#2^#(nil(), @queue') -> c_5() , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , enqueues#1^#(nil(), @queue) -> c_31() , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#3^#(nil()) -> c_25() , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , empty^#(@x) -> c_27() , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#1^#(nil()) -> c_34() , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) Consider the dependency graph 1: breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) -->_2 dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) :3 -->_1 breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) :2 2: breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) -->_1 breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) :5 -->_1 breadth#2^#(nil(), @queue') -> c_5() :6 3: dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) -->_1 dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) :4 4: dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) -->_1 dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) :25 -->_1 dequeue#2^#(::(@y, @ys), @inq) -> c_22() :24 5: breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) -->_2 breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) :8 -->_1 breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) :7 6: breadth#2^#(nil(), @queue') -> c_5() 7: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) -->_2 enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) :11 -->_1 breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) :10 8: breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) -->_1 children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) :9 9: children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) -->_1 children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) :15 -->_1 children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) :14 10: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) -->_1 breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) :1 11: enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) -->_1 enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) :12 -->_1 enqueues#1^#(nil(), @queue) -> c_31() :13 12: enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) -->_2 enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) :30 -->_1 enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) :11 13: enqueues#1^#(nil(), @queue) -> c_31() 14: children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) -->_1 children#3^#(nil(), @b, @x, @xs) -> c_14() :17 -->_1 children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() :16 15: children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) -->_1 children#2^#(nil(), @b) -> c_16() :19 -->_1 children#2^#(::(@y, @ys), @b) -> c_15() :18 16: children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() 17: children#3^#(nil(), @b, @x, @xs) -> c_14() 18: children#2^#(::(@y, @ys), @b) -> c_15() 19: children#2^#(nil(), @b) -> c_16() 20: copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) -->_1 copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) :21 21: copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) -->_1 copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) :22 -->_1 copyover#2^#(nil(), @outq) -> c_20() :23 22: copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) -->_1 copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) :20 23: copyover#2^#(nil(), @outq) -> c_20() 24: dequeue#2^#(::(@y, @ys), @inq) -> c_22() 25: dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) -->_1 dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) :26 -->_1 dequeue#3^#(nil()) -> c_25() :27 26: dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) -->_1 dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) :28 -->_2 copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) :20 27: dequeue#3^#(nil()) -> c_25() 28: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) -->_1 dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) :3 29: empty^#(@x) -> c_27() 30: enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) -->_1 enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() :31 31: enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() 32: startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) -->_1 startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) :34 -->_2 enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) :30 -->_3 empty^#(@x) -> c_27() :29 33: startBreadth#1^#(nil()) -> c_34() 34: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) -->_1 breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) :1 Following roots of the dependency graph are removed, as the considered set of starting terms is closed under reduction with respect to these rules (modulo compound contexts). { startBreadth#1^#(nil()) -> c_34() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#2^#(nil(), @queue') -> c_5() , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , enqueues#1^#(nil(), @queue) -> c_31() , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#3^#(nil()) -> c_25() , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , empty^#(@x) -> c_27() , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) We estimate the number of application of {6,13,16,17,18,19,23,24,27,29,31} by applications of Pre({6,13,16,17,18,19,23,24,27,29,31}) = {2,4,11,14,15,21,25,30,32}. Here rules are labeled as follows: DPs: { 1: breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , 2: breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , 3: dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 4: dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , 5: breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , 6: breadth#2^#(nil(), @queue') -> c_5() , 7: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , 8: breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , 9: children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , 10: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , 11: enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , 12: enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , 13: enqueues#1^#(nil(), @queue) -> c_31() , 14: children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , 15: children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , 16: children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , 17: children#3^#(nil(), @b, @x, @xs) -> c_14() , 18: children#2^#(::(@y, @ys), @b) -> c_15() , 19: children#2^#(nil(), @b) -> c_16() , 20: copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 21: copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , 22: copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , 23: copyover#2^#(nil(), @outq) -> c_20() , 24: dequeue#2^#(::(@y, @ys), @inq) -> c_22() , 25: dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , 26: dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , 27: dequeue#3^#(nil()) -> c_25() , 28: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , 29: empty^#(@x) -> c_27() , 30: enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , 31: enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() , 32: startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , 33: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } Weak DPs: { breadth#2^#(nil(), @queue') -> c_5() , enqueues#1^#(nil(), @queue) -> c_31() , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#3^#(nil()) -> c_25() , empty^#(@x) -> c_27() , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) We estimate the number of application of {12,13,20} by applications of Pre({12,13,20}) = {8,11,21}. Here rules are labeled as follows: DPs: { 1: breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , 2: breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , 3: dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 4: dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , 5: breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , 6: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , 7: breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , 8: children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , 9: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , 10: enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , 11: enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , 12: children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , 13: children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , 14: copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 15: copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , 16: copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , 17: dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , 18: dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , 19: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , 20: enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , 21: startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , 22: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) , 23: breadth#2^#(nil(), @queue') -> c_5() , 24: enqueues#1^#(nil(), @queue) -> c_31() , 25: children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , 26: children#3^#(nil(), @b, @x, @xs) -> c_14() , 27: children#2^#(::(@y, @ys), @b) -> c_15() , 28: children#2^#(nil(), @b) -> c_16() , 29: copyover#2^#(nil(), @outq) -> c_20() , 30: dequeue#2^#(::(@y, @ys), @inq) -> c_22() , 31: dequeue#3^#(nil()) -> c_25() , 32: empty^#(@x) -> c_27() , 33: enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } Weak DPs: { breadth#2^#(nil(), @queue') -> c_5() , enqueues#1^#(nil(), @queue) -> c_31() , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#3^#(nil()) -> c_25() , empty^#(@x) -> c_27() , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) We estimate the number of application of {8} by applications of Pre({8}) = {7}. Here rules are labeled as follows: DPs: { 1: breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , 2: breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , 3: dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 4: dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , 5: breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , 6: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , 7: breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , 8: children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , 9: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , 10: enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , 11: enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , 12: copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 13: copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , 14: copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , 15: dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , 16: dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , 17: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , 18: startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , 19: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) , 20: breadth#2^#(nil(), @queue') -> c_5() , 21: enqueues#1^#(nil(), @queue) -> c_31() , 22: children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , 23: children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , 24: children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , 25: children#3^#(nil(), @b, @x, @xs) -> c_14() , 26: children#2^#(::(@y, @ys), @b) -> c_15() , 27: children#2^#(nil(), @b) -> c_16() , 28: copyover#2^#(nil(), @outq) -> c_20() , 29: dequeue#2^#(::(@y, @ys), @inq) -> c_22() , 30: dequeue#3^#(nil()) -> c_25() , 31: empty^#(@x) -> c_27() , 32: enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , 33: enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } Weak DPs: { breadth#2^#(nil(), @queue') -> c_5() , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , enqueues#1^#(nil(), @queue) -> c_31() , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#3^#(nil()) -> c_25() , empty^#(@x) -> c_27() , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) We estimate the number of application of {7} by applications of Pre({7}) = {5}. Here rules are labeled as follows: DPs: { 1: breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , 2: breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , 3: dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 4: dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , 5: breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , 6: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , 7: breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , 8: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , 9: enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , 10: enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , 11: copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 12: copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , 13: copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , 14: dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , 15: dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , 16: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , 17: startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , 18: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) , 19: breadth#2^#(nil(), @queue') -> c_5() , 20: children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , 21: enqueues#1^#(nil(), @queue) -> c_31() , 22: children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , 23: children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , 24: children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , 25: children#3^#(nil(), @b, @x, @xs) -> c_14() , 26: children#2^#(::(@y, @ys), @b) -> c_15() , 27: children#2^#(nil(), @b) -> c_16() , 28: copyover#2^#(nil(), @outq) -> c_20() , 29: dequeue#2^#(::(@y, @ys), @inq) -> c_22() , 30: dequeue#3^#(nil()) -> c_25() , 31: empty^#(@x) -> c_27() , 32: enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , 33: enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } Weak DPs: { breadth#2^#(nil(), @queue') -> c_5() , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , enqueues#1^#(nil(), @queue) -> c_31() , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#3^#(nil()) -> c_25() , empty^#(@x) -> c_27() , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { breadth#2^#(nil(), @queue') -> c_5() , breadth#4^#(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> c_6(children^#(@children@3, @children@4, @children@5, @children@6)) , children^#(@a, @b, @l1, @l2) -> c_10(children#1^#(@l1, @b, @l2)) , enqueues#1^#(nil(), @queue) -> c_31() , children#1^#(::(@x, @xs), @b, @l2) -> c_11(children#3^#(@l2, @b, @x, @xs)) , children#1^#(nil(), @b, @l2) -> c_12(children#2^#(@l2, @b)) , children#3^#(::(@y, @ys), @b, @x, @xs) -> c_13() , children#3^#(nil(), @b, @x, @xs) -> c_14() , children#2^#(::(@y, @ys), @b) -> c_15() , children#2^#(nil(), @b) -> c_16() , copyover#2^#(nil(), @outq) -> c_20() , dequeue#2^#(::(@y, @ys), @inq) -> c_22() , dequeue#3^#(nil()) -> c_25() , empty^#(@x) -> c_27() , enqueue^#(@x, @queue) -> c_28(enqueue#1^#(@queue, @x)) , enqueue#1^#(tuple#2(@inq, @outq), @x) -> c_29() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_3(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_2(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_21(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_7(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_9(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , copyover^#(@copyover@1, @copyover@2) -> c_17(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_18(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_19(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_23(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_24(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_26(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_35(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) Due to missing edges in the dependency-graph, the right-hand sides of following rules could be simplified: { breadth#2^#(::(@z, @_@9), @queue') -> c_4(breadth#3^#(breadth#4(@z), @queue'), breadth#4^#(@z)) , enqueues#1^#(::(@x, @xs), @queue) -> c_30(enqueues^#(@xs, enqueue(@x, @queue)), enqueue^#(@x, @queue)) , startBreadth#1^#(::(@x, @xs)) -> c_33(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))), enqueue^#(tuple#4(@x, @x, @xs, @xs), empty(#unit())), empty^#(#unit())) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_5(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_6(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_7(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_16(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_17(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { breadth(@breadth@1, @breadth@2) -> breadth#1(dequeue(@breadth@1, @breadth@2)) , dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#1(tuple#2(@queue', @elem)) -> breadth#2(@elem, @queue') , breadth#2(::(@z, @_@9), @queue') -> breadth#3(breadth#4(@z), @queue') , breadth#2(nil(), @queue') -> nil() , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , breadth#3(tuple#2(@x, @ys), @queue') -> ::(@x, breadth#5(enqueues(@ys, @queue'))) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , breadth#5(tuple#2(@breadth@7, @breadth@8)) -> breadth(@breadth@7, @breadth@8) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue , startBreadth(@xs) -> startBreadth#1(@xs) , startBreadth#1(::(@x, @xs)) -> startBreadth#2(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#1(nil()) -> nil() , startBreadth#2(tuple#2(@breadth@1, @breadth@2)) -> breadth(@breadth@1, @breadth@2) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) We replace rewrite rules by usable rules: Weak Usable Rules: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^5)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_5(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_6(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_7(breadth^#(@breadth@7, @breadth@8)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_16(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_17(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^5)) We decompose the input problem according to the dependency graph into the upper component { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_5(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_6(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_7(breadth^#(@breadth@7, @breadth@8)) , startBreadth#1^#(::(@x, @xs)) -> c_16(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_17(breadth^#(@breadth@1, @breadth@2)) } and lower component { dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) } Further, following extension rules are added to the lower component. { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> enqueues^#(@ys, @queue') , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } TcT solves the upper component with certificate YES(O(1),O(n^3)). Sub-proof: ---------- We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_5(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_6(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_7(breadth^#(@breadth@7, @breadth@8)) , startBreadth#1^#(::(@x, @xs)) -> c_16(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_17(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) Due to missing edges in the dependency-graph, the right-hand sides of following rules could be simplified: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)), dequeue^#(@breadth@1, @breadth@2)) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_6(breadth#5^#(enqueues(@ys, @queue')), enqueues^#(@ys, @queue')) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_4(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_5(breadth^#(@breadth@7, @breadth@8)) , startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_7(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We use the processor 'matrix interpretation of dimension 3' to orient following rules strictly. DPs: { 6: startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA). [1 1 0] [0] [dequeue](x1, x2) = [1 1 1] x1 + [0] [0 1 1] [0] [0 0 1] [0] [tuple#2](x1, x2) = [0 1 0] x1 + [0] [1 1 0] [0] [0 0 1] [1 0 0] [0] [::](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 1] [0] [1 0 1] [0] [breadth#4](x1) = [0 1 0] x1 + [0] [1 1 0] [0] [0] [nil] = [0] [0] [0 0 0] [1 0 0] [0] [enqueues](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [0] [1 0 0] [0 0 1] [0] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] [tuple#4](x1, x2, x3, x4) = [0 1 0] x1 + [0 1 0] x2 + [0 0 0] x3 + [0 0 0] x4 + [0] [1 1 0] [0 0 0] [0 0 1] [0 0 1] [0] [1 1 1] [0 0 0] [0 0 0] [0] [children](x1, x2, x3, x4) = [0 1 0] x1 + [0 1 0] x2 + [0 0 0] x3 + [0] [0 1 1] [0 0 0] [0 0 1] [0] [0] [children#1](x1, x2, x3) = [0] [0] [0 0 0] [0 0 0] [0] [children#3](x1, x2, x3, x4) = [0 0 0] x3 + [1 0 0] x4 + [0] [1 0 0] [0 0 0] [0] [1 1 0] [0] [children#2](x1, x2) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [copyover](x1, x2) = [0] [0] [0] [copyover#1](x1) = [0] [0] [0] [copyover#2](x1, x2) = [0] [0] [0 0 1] [0] [dequeue#1](x1) = [1 0 1] x1 + [0] [1 1 0] [0] [1 1 0] [0] [dequeue#2](x1, x2) = [1 1 1] x2 + [0] [0 1 1] [0] [1 0 0] [0] [dequeue#3](x1) = [1 0 1] x1 + [0] [0 1 0] [0] [0 1 1] [0] [dequeue#4](x1) = [1 1 1] x1 + [0] [1 0 1] [0] [0] [empty](x1) = [0] [0] [0 0 0] [1 0 0] [0] [enqueue](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 1] [0 0 1] [0] [1 0 0] [0 0 0] [0] [enqueue#1](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [1 0 0] [0] [enqueues#1](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [0] [1 0 0] [0 0 1] [0] [0] [#unit] = [0] [0] [0 1 1] [0] [breadth^#](x1, x2) = [0 0 1] x1 + [0] [0 0 0] [0] [0 0 1] [0] [breadth#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [dequeue^#](x1, x2) = [0] [0] [0] [dequeue#1^#](x1) = [0] [0] [1 1 0] [0] [breadth#2^#](x1, x2) = [0 0 0] x2 + [0] [0 0 0] [0] [0 0 0] [1 1 0] [0] [breadth#3^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [1 0 0] [0 0 0] [0] [0] [breadth#4^#](x1) = [0] [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [1 1 0] [0] [breadth#5^#](x1) = [1 1 1] x1 + [0] [1 0 0] [0] [0] [enqueues^#](x1, x2) = [0] [0] [0] [enqueues#1^#](x1, x2) = [0] [0] [0] [children#1^#](x1, x2, x3) = [0] [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [0] [children#2^#](x1, x2) = [0] [0] [0] [copyover^#](x1, x2) = [0] [0] [0] [copyover#1^#](x1) = [0] [0] [0] [copyover#2^#](x1, x2) = [0] [0] [0] [dequeue#2^#](x1, x2) = [0] [0] [0] [dequeue#3^#](x1) = [0] [0] [0] [dequeue#4^#](x1) = [0] [0] [0] [empty^#](x1) = [0] [0] [0] [enqueue^#](x1, x2) = [0] [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [0] [startBreadth^#](x1) = [0] [0] [0 0 0] [1] [startBreadth#1^#](x1) = [1 0 0] x1 + [1] [0 0 0] [1] [1 1 0] [0] [startBreadth#2^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_1](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_2](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_3](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_4](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_5](x1) = [0 0 0] x1 + [0] [0 1 0] [0] [1 0 0] [0] [c_6](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_7](x1) = [0 0 0] x1 + [0] [0 0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [1 1 0] [0] [1 1 1] @dequeue@1 + [0] [0 1 1] [0] >= [1 1 0] [0] [1 1 1] @dequeue@1 + [0] [0 1 1] [0] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [1 1 1] [0 0 1] [0 0 @children@4, 2] [0 0 2] [0] @children@5, [0 1 0] @children@3 + [0 1 0] @children@4 + [0 0 @children@6))] 0] @children@5 + [0 0 0] @children@6 + [0] [0 1 1] [0 1 1] [0 0 1] [0 0 1] [0] >= [1 1 1] [0 0 0] [0 0 0] [0] [0 1 0] @children@3 + [0 1 0] @children@4 + [0 0 0] @children@5 + [0] [0 1 1] [0 0 0] [0 0 1] [0] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [0 0 0] [1 0 0] [0] [0 0 0] @l + [0 1 0] @queue + [0] [1 0 0] [0 0 1] [0] >= [0 0 0] [1 0 0] [0] [0 0 0] @l + [0 1 0] @queue + [0] [1 0 0] [0 0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [1 1 1] [0 0 0] [0 0 0] [0] [0 1 0] @a + [0 1 0] @b + [0 0 0] @l1 + [0] [0 1 1] [0 0 0] [0 0 1] [0] >= [1 1 0] [0] [0 1 0] @a + [0] [0 1 1] [0] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [copyover(@copyover@1, @copyover@2)] = [0] [0] [0] >= [0] [0] [0] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0] [0] [0] >= [0] [0] [0] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0] [0] [0] >= [0] [0] [0] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0] [0] [0] >= [0] [0] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [1 1 0] [0] [1 1 1] @inq + [0] [0 1 1] [0] >= [1 1 0] [0] [1 1 1] @inq + [0] [0 1 1] [0] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [1 1 0] [0] [1 1 1] @inq + [0] [0 1 1] [0] >= [1 1 0] [0] [0 1 0] @inq + [0] [0 1 1] [0] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [1 1 0] [0] [1 1 1] @inq + [0] [0 1 1] [0] >= [1 0 0] [0] [1 0 1] @inq + [0] [0 1 0] [0] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [0 0 1] [1 0 0] [0] [0 0 1] @x + [1 0 1] @xs + [0] [0 0 0] [0 0 0] [0] >= [0] [0] [0] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [0] [0] [0] >= [0] [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [1 2 0] [0] [1 2 1] @dequeue@3 + [0] [1 1 1] [0] >= [1 1 0] [0] [1 1 1] @dequeue@3 + [0] [0 1 1] [0] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [0] [0] [0] >= [0] [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0 0] [0 0 0] [0] [0 0 0] @queue + [0 0 0] @x + [0] [0 0 1] [0 0 1] [0] >= [1 0 0] [0 0 0] [0] [0 0 0] @queue + [0 0 0] @x + [0] [0 0 1] [0 0 1] [0] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 0 1] [0 0 0] [0] [0 0 0] @inq + [0 0 0] @x + [0] [1 1 0] [0 0 1] [0] >= [0 0 1] [0 0 0] [0] [0 0 0] @inq + [0 0 0] @x + [0] [1 0 0] [0 0 1] [0] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0 0] [0 0 0] [0 0 0] [0] [0 1 0] @queue + [0 0 0] @x + [0 0 0] @xs + [0] [0 0 1] [0 0 1] [1 0 0] [0] >= [1 0 0] [0 0 0] [0 0 0] [0] [0 0 0] @queue + [0 0 0] @x + [0 0 0] @xs + [0] [0 0 1] [0 0 1] [1 0 0] [0] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] >= [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 1 1] [0] [0 0 1] @breadth@1 + [0] [0 0 0] [0] >= [0 1 1] [0] [0 0 0] @breadth@1 + [0] [0 0 0] [0] = [c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)))] [breadth#1^#(tuple#2(@queue', @elem))] = [1 1 0] [0] [0 0 0] @queue' + [0] [0 0 0] [0] >= [1 1 0] [0] [0 0 0] @queue' + [0] [0 0 0] [0] = [c_2(breadth#2^#(@elem, @queue'))] [breadth#2^#(::(@z, @_@9), @queue')] = [1 1 0] [0] [0 0 0] @queue' + [0] [0 0 0] [0] >= [1 1 0] [0] [0 0 0] @queue' + [0] [0 0 0] [0] = [c_3(breadth#3^#(breadth#4(@z), @queue'))] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [1 1 0] [0 0 0] [0] [0 0 0] @queue' + [0 0 0] @x + [0] [0 0 0] [0 0 1] [0] >= [1 1 0] [0] [0 0 0] @queue' + [0] [0 0 0] [0] = [c_4(breadth#5^#(enqueues(@ys, @queue')))] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 1 1] [0] [1 2 1] @breadth@7 + [0] [0 0 1] [0] >= [0 1 1] [0] [0 0 0] @breadth@7 + [0] [0 0 1] [0] = [c_5(breadth^#(@breadth@7, @breadth@8))] [startBreadth#1^#(::(@x, @xs))] = [0 0 0] [0 0 0] [1] [0 0 1] @x + [1 0 0] @xs + [1] [0 0 0] [0 0 0] [1] > [0] [0] [0] = [c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 1 1] [0] [0 0 0] @breadth@1 + [0] [0 0 0] [0] >= [0 1 1] [0] [0 0 0] @breadth@1 + [0] [0 0 0] [0] = [c_7(breadth^#(@breadth@1, @breadth@2))] Consider the set of all dependency pairs DPs: { 1: breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , 2: breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , 3: breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) , 4: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_4(breadth#5^#(enqueues(@ys, @queue'))) , 5: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_5(breadth^#(@breadth@7, @breadth@8)) , 6: startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , 7: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_7(breadth^#(@breadth@1, @breadth@2)) } Processor 'matrix interpretation of dimension 3' induces the complexity certificate YES(?,O(n^3)) on application of dependency pairs {6}. These cover all (indirect) predecessors of dependency pairs {6,7}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^3)). Strict DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_4(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_5(breadth^#(@breadth@7, @breadth@8)) } Weak DPs: { startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_7(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^3)) We use the processor 'matrix interpretation of dimension 3' to orient following rules strictly. DPs: { 3: breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) } Trs: { children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , empty(@x) -> tuple#2(nil(), nil()) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA). [0 1 0] [0 1 0] [1] [dequeue](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 1 0] [0 1 0] [1] [0 0 0] [0 0 0] [0] [tuple#2](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [1 0 0] [0 1 0] [0] [1 0 0] [1 0 0] [1] [::](x1, x2) = [0 0 1] x1 + [0 1 0] x2 + [1] [1 0 1] [1 0 1] [1] [0 0 0] [0] [breadth#4](x1) = [0 1 1] x1 + [1] [0 0 1] [0] [0] [nil] = [0] [0] [0 0 1] [1 0 0] [0] [enqueues](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [1 1 0] [0 0 1] [0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [tuple#4](x1, x2, x3, x4) = [1 1 0] x1 + [0 1 0] x2 + [0 0 1] x3 + [1 1 0] x4 + [0] [0 0 0] [1 0 0] [0 0 1] [1 0 0] [0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [children](x1, x2, x3, x4) = [1 1 0] x1 + [1 1 0] x2 + [0 0 1] x3 + [1 1 0] x4 + [0] [0 0 0] [1 0 0] [0 0 1] [1 0 0] [0] [0 0 0] [0 0 0] [0 0 1] [1] [children#1](x1, x2, x3) = [0 0 1] x1 + [1 0 0] x2 + [1 0 0] x3 + [0] [0 0 1] [1 0 0] [0 1 1] [0] [0 0 1] [0 0 0] [0 0 0] [0 0 0] [1] [children#3](x1, x2, x3, x4) = [1 0 0] x1 + [1 0 0] x2 + [0 0 0] x3 + [1 0 1] x4 + [1] [0 1 1] [1 0 0] [0 0 1] [1 0 1] [1] [0 0 1] [0 0 0] [1] [children#2](x1, x2) = [1 0 0] x1 + [1 0 0] x2 + [0] [0 0 1] [1 0 0] [0] [0 1 0] [0 1 0] [0] [copyover](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 1 0] [0 1 0] [1] [1 1 0] [0] [copyover#1](x1) = [0 1 0] x1 + [0] [1 1 0] [1] [0 1 0] [0 1 0] [0] [copyover#2](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 1 0] [0 1 0] [1] [1 1 0] [1] [dequeue#1](x1) = [0 1 0] x1 + [0] [1 1 0] [1] [0 1 0] [0 1 0] [1] [dequeue#2](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 1 0] [0 1 0] [1] [0 1 0] [1] [dequeue#3](x1) = [0 1 0] x1 + [0] [0 1 0] [1] [0 1 0] [1] [dequeue#4](x1) = [0 1 0] x1 + [0] [0 1 0] [1] [1] [empty](x1) = [0] [1] [0 0 1] [1 0 0] [0] [enqueue](x1, x2) = [0 0 1] x1 + [0 1 0] x2 + [1] [1 0 1] [0 0 1] [1] [1 0 0] [0 0 1] [0] [enqueue#1](x1, x2) = [0 1 0] x1 + [0 0 1] x2 + [1] [0 0 1] [1 0 0] [1] [0 0 1] [1 0 0] [0] [enqueues#1](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [1 1 0] [0 0 1] [0] [1] [#unit] = [1] [1] [0 1 0] [0 1 0] [0] [breadth^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [1] [0 1 0] [0] [breadth#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [dequeue^#](x1, x2) = [0] [0] [0] [dequeue#1^#](x1) = [0] [0] [0 1 0] [0 1 0] [0] [breadth#2^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [1] [1 0 1] [0 1 0] [0] [breadth#3^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0] [breadth#4^#](x1) = [0] [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [0 1 0] [0] [breadth#5^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [enqueues^#](x1, x2) = [0] [0] [0] [enqueues#1^#](x1, x2) = [0] [0] [0] [children#1^#](x1, x2, x3) = [0] [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [0] [children#2^#](x1, x2) = [0] [0] [0] [copyover^#](x1, x2) = [0] [0] [0] [copyover#1^#](x1) = [0] [0] [0] [copyover#2^#](x1, x2) = [0] [0] [0] [dequeue#2^#](x1, x2) = [0] [0] [0] [dequeue#3^#](x1) = [0] [0] [0] [dequeue#4^#](x1) = [0] [0] [0] [empty^#](x1) = [0] [0] [0] [enqueue^#](x1, x2) = [0] [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [0] [startBreadth^#](x1) = [0] [0] [0 1 1] [1] [startBreadth#1^#](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [0 1 0] [1] [startBreadth#2^#](x1) = [0 0 0] x1 + [1] [0 0 0] [0] [1 0 0] [0] [c_1](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_2](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_3](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_4](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_5](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 1 0] [0] [c_6](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [1] [c_7](x1) = [0 0 0] x1 + [0] [0 0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [0 1 0] [0 1 0] [1] [0 1 0] @dequeue@1 + [0 1 0] @dequeue@2 + [0] [0 1 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [1] [0 1 0] @dequeue@1 + [0 1 0] @dequeue@2 + [0] [0 1 0] [0 1 0] [1] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [0 0 0] [0 0 0] [0 0 @children@4, 0] [0 0 0] [0] @children@5, [1 1 0] @children@3 + [1 1 0] @children@4 + [0 0 @children@6))] 2] @children@5 + [2 1 0] @children@6 + [1] [0 0 0] [1 0 0] [0 0 1] [1 0 0] [0] >= [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [1 1 0] @children@3 + [1 1 0] @children@4 + [0 0 1] @children@5 + [1 1 0] @children@6 + [0] [0 0 0] [1 0 0] [0 0 1] [1 0 0] [0] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [0 0 1] [1 0 0] [0] [0 1 0] @l + [0 1 0] @queue + [0] [1 1 0] [0 0 1] [0] >= [0 0 1] [1 0 0] [0] [0 1 0] @l + [0 1 0] @queue + [0] [1 1 0] [0 0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [1 1 0] @a + [1 1 0] @b + [0 0 1] @l1 + [1 1 0] @l2 + [0] [0 0 0] [1 0 0] [0 0 1] [1 0 0] [0] >= [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [0 1 0] @a + [1 1 0] @b + [0 0 1] @l1 + [1 0 0] @l2 + [0] [0 0 0] [1 0 0] [0 0 1] [1 0 0] [0] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [0 0 0] [0 0 1] [0 0 0] [0 0 0] [1] [1 0 0] @b + [1 0 0] @l2 + [1 0 1] @x + [1 0 1] @xs + [1] [1 0 0] [0 1 1] [1 0 1] [1 0 1] [1] >= [0 0 0] [0 0 1] [0 0 0] [0 0 0] [1] [1 0 0] @b + [1 0 0] @l2 + [0 0 0] @x + [1 0 1] @xs + [1] [1 0 0] [0 1 1] [0 0 1] [1 0 1] [1] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [0 0 0] [0 0 1] [1] [1 0 0] @b + [1 0 0] @l2 + [0] [1 0 0] [0 1 1] [0] >= [0 0 0] [0 0 1] [1] [1 0 0] @b + [1 0 0] @l2 + [0] [1 0 0] [0 0 1] [0] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [0 0 0] [0 0 0] [0 0 0] [1 0 1] [1 0 1] [2] [1 0 0] @b + [0 0 0] @x + [1 0 1] @xs + [1 0 0] @y + [1 0 0] @ys + [2] [1 0 0] [0 0 1] [1 0 1] [1 0 2] [1 1 1] [3] >= [0 0 0] [0 0 0] [0 0 0] [0 0 0] [2] [1 0 0] @b + [1 0 1] @xs + [1 0 0] @y + [1 0 0] @ys + [2] [1 0 0] [1 0 1] [1 0 0] [1 0 0] [3] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [0 0 0] [0 0 0] [0 0 0] [1] [1 0 0] @b + [0 0 0] @x + [1 0 1] @xs + [1] [1 0 0] [0 0 1] [1 0 1] [1] > [0] [0] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [0 0 0] [1 0 1] [1 0 1] [2] [1 0 0] @b + [1 0 0] @y + [1 0 0] @ys + [1] [1 0 0] [1 0 1] [1 0 1] [1] > [0 0 0] [0 0 0] [1] [1 0 0] @b + [1 0 0] @ys + [1] [1 0 0] [1 0 0] [1] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [0 0 0] [1] [1 0 0] @b + [0] [1 0 0] [0] > [0] [0] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [0 1 0] [0 1 0] [0] [0 1 0] @copyover@1 + [0 1 0] @copyover@2 + [0] [0 1 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [0] [0 1 0] @copyover@1 + [0 1 0] @copyover@2 + [0] [0 1 0] [0 1 0] [1] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0 1 0] [0 1 0] [0] [0 1 0] @inq + [0 1 0] @outq + [0] [0 1 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [0] [0 1 0] @inq + [0 1 0] @outq + [0] [0 1 0] [0 1 0] [1] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0 1 0] [0 0 1] [0 1 0] [1] [0 1 0] @outq + [0 0 1] @x + [0 1 0] @xs + [1] [0 1 0] [0 0 1] [0 1 0] [2] >= [0 1 0] [0 0 1] [0 1 0] [1] [0 1 0] @outq + [0 0 1] @x + [0 1 0] @xs + [1] [0 1 0] [0 0 1] [0 1 0] [2] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0 1 0] [0] [0 1 0] @outq + [0] [0 1 0] [1] >= [0 0 0] [0] [0 1 0] @outq + [0] [0 1 0] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [0 1 0] [0 1 0] [1] [0 1 0] @inq + [0 1 0] @outq + [0] [0 1 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [1] [0 1 0] @inq + [0 1 0] @outq + [0] [0 1 0] [0 1 0] [1] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [0 1 0] [0 0 1] [0 1 0] [2] [0 1 0] @inq + [0 0 1] @y + [0 1 0] @ys + [1] [0 1 0] [0 0 1] [0 1 0] [2] > [0 0 0] [0 0 0] [0 0 0] [0] [0 1 0] @inq + [0 0 1] @y + [0 1 0] @ys + [1] [0 0 0] [0 0 1] [0 0 0] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [0 1 0] [1] [0 1 0] @inq + [0] [0 1 0] [1] >= [0 1 0] [1] [0 1 0] @inq + [0] [0 1 0] [1] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [0 0 1] [0 1 0] [2] [0 0 1] @x + [0 1 0] @xs + [1] [0 0 1] [0 1 0] [2] >= [0 0 1] [0 1 0] [2] [0 0 1] @x + [0 1 0] @xs + [1] [0 0 1] [0 1 0] [2] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [1] [0] [1] > [0] [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [0 1 0] [0 1 0] [1] [0 1 0] @dequeue@3 + [0 1 0] @dequeue@4 + [0] [0 1 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [1] [0 1 0] @dequeue@3 + [0 1 0] @dequeue@4 + [0] [0 1 0] [0 1 0] [1] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [1] [0] [1] > [0] [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0 0] [0 0 1] [0] [0 1 0] @queue + [0 0 1] @x + [1] [0 0 1] [1 0 1] [1] >= [1 0 0] [0 0 1] [0] [0 1 0] @queue + [0 0 1] @x + [1] [0 0 1] [1 0 0] [1] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 0 0] [0 0 0] [0 0 1] [0] [0 1 0] @inq + [0 1 0] @outq + [0 0 1] @x + [1] [1 0 0] [0 1 0] [1 0 0] [1] >= [0 0 0] [0 0 0] [0 0 0] [0] [0 1 0] @inq + [0 1 0] @outq + [0 0 1] @x + [1] [1 0 0] [0 1 0] [1 0 0] [1] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0 0] [1 0 1] [1 0 1] [1] [0 1 0] @queue + [0 0 1] @x + [0 1 0] @xs + [1] [0 0 1] [1 0 1] [1 1 0] [2] > [1 0 0] [0 0 1] [0 0 1] [0] [0 1 0] @queue + [0 0 1] @x + [0 1 0] @xs + [1] [0 0 1] [1 0 1] [1 1 0] [1] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] >= [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 1 0] [0 1 0] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [1] >= [0 1 0] [0 1 0] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2)))] [breadth#1^#(tuple#2(@queue', @elem))] = [0 1 0] [0 1 0] [0] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [0] >= [0 1 0] [0 1 0] [0] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [0] = [c_2(breadth#2^#(@elem, @queue'))] [breadth#2^#(::(@z, @_@9), @queue')] = [0 1 0] [0 1 0] [0 0 1] [1] [0 0 0] @_@9 + [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0 0 0] [1] > [0 1 0] [0 0 1] [0] [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0] = [c_3(breadth#3^#(breadth#4(@z), @queue'))] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 1 0] [1 0 0] [0 1 0] [0] [0 0 0] @queue' + [0 0 0] @x + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0 0 0] [0] >= [0 1 0] [0 1 0] [0] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] = [c_4(breadth#5^#(enqueues(@ys, @queue')))] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 1 0] [0 1 0] [0] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] >= [0 1 0] [0 1 0] [0] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] = [c_5(breadth^#(@breadth@7, @breadth@8))] [startBreadth#1^#(::(@x, @xs))] = [1 0 2] [1 1 1] [3] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] >= [1 0 0] [1 0 1] [3] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] = [c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 1 0] [0 1 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [1] [0 0 0] [0 0 0] [0] >= [0 1 0] [0 1 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_7(breadth^#(@breadth@1, @breadth@2))] Consider the set of all dependency pairs DPs: { 1: breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , 2: breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , 3: breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) , 4: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_4(breadth#5^#(enqueues(@ys, @queue'))) , 5: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_5(breadth^#(@breadth@7, @breadth@8)) , 6: startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , 7: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_7(breadth^#(@breadth@1, @breadth@2)) } Processor 'matrix interpretation of dimension 3' induces the complexity certificate YES(?,O(n^3)) on application of dependency pairs {3}. These cover all (indirect) predecessors of dependency pairs {1,2,3,4,5,6,7}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We apply the transformation 'removehead' on the sub-problem: Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_4(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_5(breadth^#(@breadth@7, @breadth@8)) , startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_7(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost We apply the transformation 'simpPE' on the sub-problem: Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_4(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_5(breadth^#(@breadth@7, @breadth@8)) , startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_7(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost We apply the transformation 'removetails' on the sub-problem: Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_4(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_5(breadth^#(@breadth@7, @breadth@8)) , startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_7(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { breadth^#(@breadth@1, @breadth@2) -> c_1(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth#1^#(tuple#2(@queue', @elem)) -> c_2(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_3(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_4(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_5(breadth^#(@breadth@7, @breadth@8)) , startBreadth#1^#(::(@x, @xs)) -> c_6(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_7(breadth^#(@breadth@1, @breadth@2)) } We apply the transformation 'trivial' on the sub-problem: Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost We apply the transformation 'usablerules' on the sub-problem: Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded We return to the main proof. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> enqueues^#(@ys, @queue') , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We use the processor 'matrix interpretation of dimension 2' to orient following rules strictly. DPs: { 4: enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , 19: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Trs: { children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , empty(@x) -> tuple#2(nil(), nil()) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_8) = {1}, Uargs(c_9) = {1}, Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1}, Uargs(c_13) = {1}, Uargs(c_14) = {1, 2}, Uargs(c_15) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [dequeue](x1, x2) = [0 2] x1 + [0 2] x2 + [1] [0 1] [0 1] [0] [tuple#2](x1, x2) = [0 0] x1 + [0 1] x2 + [0] [0 1] [0 1] [0] [::](x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 1] [0 1] [1] [breadth#4](x1) = [0 1] x1 + [1] [2 1] [1] [nil] = [2] [0] [enqueues](x1, x2) = [0 2] x1 + [1 0] x2 + [0] [0 1] [0 1] [0] [tuple#4](x1, x2, x3, x4) = [0 1] x1 + [0 1] x2 + [0 0] x3 + [1 0] x4 + [0] [0 0] [0 0] [0 1] [0 0] [0] [children](x1, x2, x3, x4) = [0 0] x1 + [0 0] x2 + [0 1] x3 + [0 0] x4 + [1] [0 2] [0 2] [0 1] [2 0] [1] [children#1](x1, x2, x3) = [2 2] x1 + [0 2] x2 + [2 2] x3 + [0] [0 1] [0 0] [0 0] [1] [children#3](x1, x2, x3, x4) = [2 2] x1 + [0 1] x2 + [0 2] x3 + [2 0] x4 + [1] [0 0] [0 0] [0 0] [0 1] [2] [children#2](x1, x2) = [2 2] x1 + [0 1] x2 + [2] [0 0] [0 0] [1] [copyover](x1, x2) = [0 2] x1 + [0 2] x2 + [0] [0 1] [0 1] [0] [copyover#1](x1) = [0 2] x1 + [0] [0 1] [0] [copyover#2](x1, x2) = [0 2] x1 + [0 2] x2 + [0] [0 1] [0 1] [0] [dequeue#1](x1) = [0 2] x1 + [1] [0 1] [0] [dequeue#2](x1, x2) = [0 2] x1 + [0 2] x2 + [1] [0 1] [0 1] [0] [dequeue#3](x1) = [0 2] x1 + [1] [0 1] [0] [dequeue#4](x1) = [0 2] x1 + [1] [0 1] [0] [empty](x1) = [1 0] x1 + [2] [1 0] [0] [enqueue](x1, x2) = [0 2] x1 + [1 0] x2 + [2] [0 1] [0 1] [1] [enqueue#1](x1, x2) = [1 0] x1 + [0 0] x2 + [2] [0 1] [0 1] [1] [enqueues#1](x1, x2) = [0 2] x1 + [1 0] x2 + [0] [0 1] [0 1] [0] [#unit] = [1] [0] [breadth^#](x1, x2) = [0 1] x1 + [0 1] x2 + [0] [0 0] [0 0] [2] [breadth#1^#](x1) = [0 1] x1 + [0] [0 0] [2] [dequeue^#](x1, x2) = [0] [0] [dequeue#1^#](x1) = [0] [0] [breadth#2^#](x1, x2) = [0 1] x1 + [0 1] x2 + [0] [0 0] [0 0] [2] [breadth#3^#](x1, x2) = [1 0] x1 + [0 1] x2 + [0] [0 0] [0 0] [2] [breadth#4^#](x1) = [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [breadth#5^#](x1) = [0 1] x1 + [0] [0 0] [2] [enqueues^#](x1, x2) = [0 1] x1 + [0] [0 0] [1] [enqueues#1^#](x1, x2) = [0 1] x1 + [0] [0 0] [1] [children#1^#](x1, x2, x3) = [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [children#2^#](x1, x2) = [0] [0] [copyover^#](x1, x2) = [0 0] x1 + [0 0] x2 + [0] [0 1] [1 0] [1] [copyover#1^#](x1) = [0] [0] [copyover#2^#](x1, x2) = [0 0] x1 + [0] [0 1] [0] [dequeue#2^#](x1, x2) = [0 0] x1 + [0 0] x2 + [0] [1 1] [1 0] [2] [dequeue#3^#](x1) = [0] [0] [dequeue#4^#](x1) = [0 0] x1 + [0] [0 2] [0] [empty^#](x1) = [0] [0] [enqueue^#](x1, x2) = [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [startBreadth^#](x1) = [0] [0] [startBreadth#1^#](x1) = [2 2] x1 + [2] [0 0] [2] [startBreadth#2^#](x1) = [0 2] x1 + [2] [0 0] [2] [c_3](x1) = [1 0] x1 + [0] [0 0] [0] [c_4](x1) = [1 0] x1 + [0] [0 0] [0] [c_8](x1) = [1 0] x1 + [0] [0 0] [0] [c_9](x1) = [1 0] x1 + [0] [0 0] [0] [c_10](x1) = [1 1] x1 + [0] [0 0] [0] [c_11](x1) = [1 0] x1 + [0] [0 0] [0] [c_12](x1) = [1 0] x1 + [0] [0 0] [0] [c_13](x1) = [1 0] x1 + [0] [0 0] [0] [c_14](x1, x2) = [2 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_15](x1) = [1 0] x1 + [0] [0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [0 2] @dequeue@1 + [0 2] @dequeue@2 + [1] [0 1] [0 1] [0] >= [0 2] @dequeue@1 + [0 2] @dequeue@2 + [1] [0 1] [0 1] [0] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [0 0] @children@3 + [0 0] @children@4 + [0 1] @children@5 + [0 @children@4, 0] @children@6 + [1] @children@5, [0 2] [0 2] [0 1] [2 @children@6))] 0] [1] >= [0 0] @children@3 + [0 0] @children@4 + [0 1] @children@5 + [0 0] @children@6 + [1] [0 2] [0 2] [0 1] [2 0] [1] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [0 2] @l + [1 0] @queue + [0] [0 1] [0 1] [0] >= [0 2] @l + [1 0] @queue + [0] [0 1] [0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [0 0] @a + [0 0] @b + [0 1] @l1 + [0 0] @l2 + [1] [0 2] [0 2] [0 1] [2 0] [1] >= [0 0] @a + [0 0] @b + [0 1] @l1 + [1] [0 1] [0 1] [0 1] [1] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [0 2] @b + [2 2] @l2 + [2 2] @x + [2 2] @xs + [4] [0 0] [0 0] [0 1] [0 1] [2] > [0 1] @b + [2 2] @l2 + [0 2] @x + [2 0] @xs + [1] [0 0] [0 0] [0 0] [0 1] [2] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [0 2] @b + [2 2] @l2 + [4] [0 0] [0 0] [1] > [0 1] @b + [2 2] @l2 + [2] [0 0] [0 0] [1] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [0 1] @b + [0 2] @x + [2 0] @xs + [2 2] @y + [2 2] @ys + [5] [0 0] [0 0] [0 1] [0 0] [0 0] [2] > [0 1] @b + [0 2] @x + [1 0] @xs + [0 1] @y + [1 0] @ys + [4] [0 0] [0 0] [0 1] [0 0] [0 0] [2] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [0 1] @b + [0 2] @x + [2 0] @xs + [5] [0 0] [0 0] [0 1] [2] > [2] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [0 1] @b + [2 2] @y + [2 2] @ys + [6] [0 0] [0 0] [0 0] [1] > [0 1] @b + [0 1] @y + [1 0] @ys + [3] [0 0] [0 0] [0 0] [1] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [0 1] @b + [6] [0 0] [1] > [2] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [0 2] @copyover@1 + [0 2] @copyover@2 + [0] [0 1] [0 1] [0] >= [0 2] @copyover@1 + [0 2] @copyover@2 + [0] [0 1] [0 1] [0] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0 2] @inq + [0 2] @outq + [0] [0 1] [0 1] [0] >= [0 2] @inq + [0 2] @outq + [0] [0 1] [0 1] [0] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0 2] @outq + [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [0 1] [1] >= [0 2] @outq + [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [0 1] [1] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0 2] @outq + [0] [0 1] [0] >= [0 1] @outq + [0] [0 1] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [0 2] @inq + [0 2] @outq + [1] [0 1] [0 1] [0] >= [0 2] @inq + [0 2] @outq + [1] [0 1] [0 1] [0] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [0 2] @inq + [0 2] @y + [0 2] @ys + [3] [0 1] [0 1] [0 1] [1] > [0 0] @inq + [0 1] @y + [0 0] @ys + [1] [0 1] [0 1] [0 1] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [0 2] @inq + [1] [0 1] [0] >= [0 2] @inq + [1] [0 1] [0] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [0 2] @x + [0 2] @xs + [3] [0 1] [0 1] [1] >= [0 2] @x + [0 2] @xs + [3] [0 1] [0 1] [1] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [1] [0] > [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [0 2] @dequeue@3 + [0 2] @dequeue@4 + [1] [0 1] [0 1] [0] >= [0 2] @dequeue@3 + [0 2] @dequeue@4 + [1] [0 1] [0 1] [0] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [1 0] @x + [2] [1 0] [0] > [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0] @queue + [0 2] @x + [2] [0 1] [0 1] [1] >= [1 0] @queue + [0 0] @x + [2] [0 1] [0 1] [1] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 0] @inq + [0 1] @outq + [0 0] @x + [2] [0 1] [0 1] [0 1] [1] > [0 0] @inq + [0 1] @outq + [0 0] @x + [0] [0 1] [0 1] [0 1] [1] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0] @queue + [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [0 1] [1] >= [1 0] @queue + [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [0 1] [1] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0] @queue + [0] [0 1] [0] >= [1 0] @queue + [0] [0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 1] @breadth@1 + [0 1] @breadth@2 + [0] [0 0] [0 0] [2] >= [0 1] @breadth@1 + [0 1] @breadth@2 + [0] [0 0] [0 0] [2] = [breadth#1^#(dequeue(@breadth@1, @breadth@2))] [breadth^#(@breadth@1, @breadth@2)] = [0 1] @breadth@1 + [0 1] @breadth@2 + [0] [0 0] [0 0] [2] >= [0] [0] = [dequeue^#(@breadth@1, @breadth@2)] [breadth#1^#(tuple#2(@queue', @elem))] = [0 1] @elem + [0 1] @queue' + [0] [0 0] [0 0] [2] >= [0 1] @elem + [0 1] @queue' + [0] [0 0] [0 0] [2] = [breadth#2^#(@elem, @queue')] [dequeue^#(@dequeue@1, @dequeue@2)] = [0] [0] >= [0] [0] = [c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)))] [dequeue#1^#(tuple#2(@inq, @outq))] = [0] [0] >= [0] [0] = [c_4(dequeue#2^#(@outq, @inq))] [breadth#2^#(::(@z, @_@9), @queue')] = [0 1] @_@9 + [0 1] @queue' + [0 1] @z + [1] [0 0] [0 0] [0 0] [2] >= [0 1] @queue' + [0 1] @z + [1] [0 0] [0 0] [2] = [breadth#3^#(breadth#4(@z), @queue')] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 1] @queue' + [0 1] @ys + [0] [0 0] [0 0] [2] >= [0 1] @queue' + [0 1] @ys + [0] [0 0] [0 0] [2] = [breadth#5^#(enqueues(@ys, @queue'))] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 1] @queue' + [0 1] @ys + [0] [0 0] [0 0] [2] >= [0 1] @ys + [0] [0 0] [1] = [enqueues^#(@ys, @queue')] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 1] @breadth@7 + [0 1] @breadth@8 + [0] [0 0] [0 0] [2] >= [0 1] @breadth@7 + [0 1] @breadth@8 + [0] [0 0] [0 0] [2] = [breadth^#(@breadth@7, @breadth@8)] [enqueues^#(@l, @queue)] = [0 1] @l + [0] [0 0] [1] >= [0 1] @l + [0] [0 0] [0] = [c_8(enqueues#1^#(@l, @queue))] [enqueues#1^#(::(@x, @xs), @queue)] = [0 1] @x + [0 1] @xs + [1] [0 0] [0 0] [1] > [0 1] @xs + [0] [0 0] [0] = [c_9(enqueues^#(@xs, enqueue(@x, @queue)))] [copyover^#(@copyover@1, @copyover@2)] = [0 0] @copyover@1 + [0 0] @copyover@2 + [0] [0 1] [1 0] [1] >= [0] [0] = [c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2)))] [copyover#1^#(tuple#2(@inq, @outq))] = [0] [0] >= [0] [0] = [c_11(copyover#2^#(@inq, @outq))] [copyover#2^#(::(@x, @xs), @outq)] = [0 0] @x + [0 0] @xs + [0] [0 1] [0 1] [1] >= [0] [0] = [c_12(copyover^#(@xs, ::(@x, @outq)))] [dequeue#2^#(nil(), @inq)] = [0 0] @inq + [0] [1 0] [4] >= [0] [0] = [c_13(dequeue#3^#(@inq))] [dequeue#3^#(::(@x, @xs))] = [0] [0] >= [0] [0] = [c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil()))] [dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4))] = [0 0] @dequeue@3 + [0 0] @dequeue@4 + [0] [0 2] [0 2] [0] >= [0] [0] = [c_15(dequeue^#(@dequeue@3, @dequeue@4))] [startBreadth#1^#(::(@x, @xs))] = [2 2] @x + [2 2] @xs + [6] [0 0] [0 0] [2] >= [0 2] @xs + [6] [0 0] [2] = [startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 2] @breadth@1 + [0 2] @breadth@2 + [2] [0 0] [0 0] [2] > [0 1] @breadth@1 + [0 1] @breadth@2 + [0] [0 0] [0 0] [2] = [breadth^#(@breadth@1, @breadth@2)] Consider the set of all dependency pairs DPs: { 1: dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 2: dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , 3: enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , 4: enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , 5: copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 6: copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , 7: copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , 8: dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , 9: dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , 10: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) , 11: breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , 12: breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , 13: breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , 14: breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , 15: breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , 16: breadth#3^#(tuple#2(@x, @ys), @queue') -> enqueues^#(@ys, @queue') , 17: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , 18: startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , 19: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Processor 'matrix interpretation of dimension 2' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {4,19}. These cover all (indirect) predecessors of dependency pairs {4,18,19}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> enqueues^#(@ys, @queue') , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We use the processor 'matrix interpretation of dimension 2' to orient following rules strictly. DPs: { 11: breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , 15: breadth#3^#(tuple#2(@x, @ys), @queue') -> enqueues^#(@ys, @queue') , 17: enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) } Trs: { children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(nil(), @b, @x, @xs) -> nil() , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , enqueues#1(nil(), @queue) -> @queue } Sub-proof: ---------- The following argument positions are usable: Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_8) = {1}, Uargs(c_9) = {1}, Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1}, Uargs(c_13) = {1}, Uargs(c_14) = {1, 2}, Uargs(c_15) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [dequeue](x1, x2) = [0 2] x1 + [0 2] x2 + [0] [0 1] [0 1] [0] [tuple#2](x1, x2) = [0 0] x1 + [0 1] x2 + [0] [0 1] [0 1] [0] [::](x1, x2) = [0 1] x1 + [1 0] x2 + [1] [0 1] [0 1] [1] [breadth#4](x1) = [0 1] x1 + [1] [1 2] [1] [nil] = [0] [0] [enqueues](x1, x2) = [1 1] x1 + [2 2] x2 + [2] [0 1] [0 1] [0] [tuple#4](x1, x2, x3, x4) = [0 1] x1 + [0 1] x2 + [0 0] x3 + [0] [0 0] [0 0] [1 0] [0] [children](x1, x2, x3, x4) = [0 0] x1 + [0 0] x2 + [1 0] x3 + [1] [0 1] [0 1] [2 0] [1] [children#1](x1, x2, x3) = [1 0] x1 + [0 1] x3 + [1] [1 0] [0 0] [1] [children#3](x1, x2, x3, x4) = [1 0] x4 + [2] [1 0] [2] [children#2](x1, x2) = [0 1] x1 + [0] [0 0] [1] [copyover](x1, x2) = [0 2] x1 + [0 2] x2 + [0] [0 1] [0 1] [0] [copyover#1](x1) = [0 2] x1 + [0] [0 1] [0] [copyover#2](x1, x2) = [0 2] x1 + [0 2] x2 + [0] [0 1] [0 1] [0] [dequeue#1](x1) = [0 2] x1 + [0] [0 1] [0] [dequeue#2](x1, x2) = [0 2] x1 + [0 2] x2 + [0] [0 1] [0 1] [0] [dequeue#3](x1) = [0 2] x1 + [0] [0 1] [0] [dequeue#4](x1) = [0 2] x1 + [0] [0 1] [0] [empty](x1) = [0] [0] [enqueue](x1, x2) = [0 0] x1 + [1 0] x2 + [0] [0 1] [0 1] [1] [enqueue#1](x1, x2) = [1 0] x1 + [0 0] x2 + [0] [0 1] [0 1] [1] [enqueues#1](x1, x2) = [1 1] x1 + [2 2] x2 + [2] [0 1] [0 1] [0] [#unit] = [0] [0] [breadth^#](x1, x2) = [0 2] x1 + [0 2] x2 + [2] [0 0] [0 0] [2] [breadth#1^#](x1) = [0 2] x1 + [2] [0 0] [2] [dequeue^#](x1, x2) = [0 2] x1 + [0 2] x2 + [0] [0 0] [0 0] [0] [dequeue#1^#](x1) = [0 2] x1 + [0] [0 0] [0] [breadth#2^#](x1, x2) = [0 2] x1 + [0 2] x2 + [2] [0 0] [0 0] [2] [breadth#3^#](x1, x2) = [2 0] x1 + [0 2] x2 + [2] [0 0] [0 0] [2] [breadth#4^#](x1) = [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [breadth#5^#](x1) = [0 2] x1 + [2] [0 0] [2] [enqueues^#](x1, x2) = [0 1] x1 + [1] [0 0] [0] [enqueues#1^#](x1, x2) = [0 1] x1 + [1] [0 0] [1] [children#1^#](x1, x2, x3) = [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [children#2^#](x1, x2) = [0] [0] [copyover^#](x1, x2) = [0] [1] [copyover#1^#](x1) = [0 0] x1 + [0] [1 0] [0] [copyover#2^#](x1, x2) = [0] [1] [dequeue#2^#](x1, x2) = [0 0] x1 + [0 2] x2 + [0] [1 1] [1 1] [0] [dequeue#3^#](x1) = [0 2] x1 + [0] [0 0] [0] [dequeue#4^#](x1) = [0 2] x1 + [0] [0 0] [0] [empty^#](x1) = [0] [0] [enqueue^#](x1, x2) = [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [startBreadth^#](x1) = [0] [0] [startBreadth#1^#](x1) = [2 0] x1 + [2] [2 0] [2] [startBreadth#2^#](x1) = [2 2] x1 + [2] [0 2] [2] [c_3](x1) = [1 0] x1 + [0] [0 0] [0] [c_4](x1) = [1 0] x1 + [0] [0 0] [0] [c_8](x1) = [1 0] x1 + [0] [0 0] [0] [c_9](x1) = [1 0] x1 + [0] [0 0] [0] [c_10](x1) = [1 0] x1 + [0] [0 0] [0] [c_11](x1) = [1 0] x1 + [0] [0 0] [0] [c_12](x1) = [1 0] x1 + [0] [0 0] [0] [c_13](x1) = [1 0] x1 + [0] [0 0] [0] [c_14](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [c_15](x1) = [1 1] x1 + [0] [0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [0 2] @dequeue@1 + [0 2] @dequeue@2 + [0] [0 1] [0 1] [0] >= [0 2] @dequeue@1 + [0 2] @dequeue@2 + [0] [0 1] [0 1] [0] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [0 0] @children@3 + [0 0] @children@4 + [1 0] @children@5 + [1] @children@4, [0 1] [0 1] [2 0] [1] @children@5, @children@6))] >= [0 0] @children@3 + [0 0] @children@4 + [1 0] @children@5 + [1] [0 1] [0 1] [2 0] [1] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [1 1] @l + [2 2] @queue + [2] [0 1] [0 1] [0] >= [1 1] @l + [2 2] @queue + [2] [0 1] [0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [0 0] @a + [0 0] @b + [1 0] @l1 + [1] [0 1] [0 1] [2 0] [1] >= [0 0] @a + [0 0] @b + [1 0] @l1 + [1] [0 1] [0 1] [1 0] [1] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [0 1] @l2 + [0 1] @x + [1 0] @xs + [2] [0 0] [0 1] [1 0] [2] >= [1 0] @xs + [2] [1 0] [2] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [0 1] @l2 + [1] [0 0] [1] > [0 1] @l2 + [0] [0 0] [1] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [1 0] @xs + [2] [1 0] [2] >= [1 0] @xs + [2] [1 0] [2] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [1 0] @xs + [2] [1 0] [2] > [0] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [0 1] @y + [0 1] @ys + [1] [0 0] [0 0] [1] >= [1] [1] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [0] [1] >= [0] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [0 2] @copyover@1 + [0 2] @copyover@2 + [0] [0 1] [0 1] [0] >= [0 2] @copyover@1 + [0 2] @copyover@2 + [0] [0 1] [0 1] [0] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0 2] @inq + [0 2] @outq + [0] [0 1] [0 1] [0] >= [0 2] @inq + [0 2] @outq + [0] [0 1] [0 1] [0] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0 2] @outq + [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [0 1] [1] >= [0 2] @outq + [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [0 1] [1] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0 2] @outq + [0] [0 1] [0] >= [0 1] @outq + [0] [0 1] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [0 2] @inq + [0 2] @outq + [0] [0 1] [0 1] [0] >= [0 2] @inq + [0 2] @outq + [0] [0 1] [0 1] [0] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [0 2] @inq + [0 2] @y + [0 2] @ys + [2] [0 1] [0 1] [0 1] [1] > [0 0] @inq + [0 1] @y + [0 0] @ys + [1] [0 1] [0 1] [0 1] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [0 2] @inq + [0] [0 1] [0] >= [0 2] @inq + [0] [0 1] [0] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [1] >= [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [1] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [0] [0] >= [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [0 2] @dequeue@3 + [0 2] @dequeue@4 + [0] [0 1] [0 1] [0] >= [0 2] @dequeue@3 + [0 2] @dequeue@4 + [0] [0 1] [0 1] [0] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [0] [0] >= [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0] @queue + [0 0] @x + [0] [0 1] [0 1] [1] >= [1 0] @queue + [0 0] @x + [0] [0 1] [0 1] [1] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 0] @inq + [0 1] @outq + [0 0] @x + [0] [0 1] [0 1] [0 1] [1] >= [0 0] @inq + [0 1] @outq + [0 0] @x + [0] [0 1] [0 1] [0 1] [1] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [2 2] @queue + [0 2] @x + [1 1] @xs + [4] [0 1] [0 1] [0 1] [1] >= [2 2] @queue + [0 2] @x + [1 1] @xs + [4] [0 1] [0 1] [0 1] [1] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [2 2] @queue + [2] [0 1] [0] > [1 0] @queue + [0] [0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 2] @breadth@1 + [0 2] @breadth@2 + [2] [0 0] [0 0] [2] >= [0 2] @breadth@1 + [0 2] @breadth@2 + [2] [0 0] [0 0] [2] = [breadth#1^#(dequeue(@breadth@1, @breadth@2))] [breadth^#(@breadth@1, @breadth@2)] = [0 2] @breadth@1 + [0 2] @breadth@2 + [2] [0 0] [0 0] [2] > [0 2] @breadth@1 + [0 2] @breadth@2 + [0] [0 0] [0 0] [0] = [dequeue^#(@breadth@1, @breadth@2)] [breadth#1^#(tuple#2(@queue', @elem))] = [0 2] @elem + [0 2] @queue' + [2] [0 0] [0 0] [2] >= [0 2] @elem + [0 2] @queue' + [2] [0 0] [0 0] [2] = [breadth#2^#(@elem, @queue')] [dequeue^#(@dequeue@1, @dequeue@2)] = [0 2] @dequeue@1 + [0 2] @dequeue@2 + [0] [0 0] [0 0] [0] >= [0 2] @dequeue@1 + [0 2] @dequeue@2 + [0] [0 0] [0 0] [0] = [c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)))] [dequeue#1^#(tuple#2(@inq, @outq))] = [0 2] @inq + [0 2] @outq + [0] [0 0] [0 0] [0] >= [0 2] @inq + [0] [0 0] [0] = [c_4(dequeue#2^#(@outq, @inq))] [breadth#2^#(::(@z, @_@9), @queue')] = [0 2] @_@9 + [0 2] @queue' + [0 2] @z + [4] [0 0] [0 0] [0 0] [2] >= [0 2] @queue' + [0 2] @z + [4] [0 0] [0 0] [2] = [breadth#3^#(breadth#4(@z), @queue')] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 2] @queue' + [0 2] @ys + [2] [0 0] [0 0] [2] >= [0 2] @queue' + [0 2] @ys + [2] [0 0] [0 0] [2] = [breadth#5^#(enqueues(@ys, @queue'))] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 2] @queue' + [0 2] @ys + [2] [0 0] [0 0] [2] > [0 1] @ys + [1] [0 0] [0] = [enqueues^#(@ys, @queue')] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 2] @breadth@7 + [0 2] @breadth@8 + [2] [0 0] [0 0] [2] >= [0 2] @breadth@7 + [0 2] @breadth@8 + [2] [0 0] [0 0] [2] = [breadth^#(@breadth@7, @breadth@8)] [enqueues^#(@l, @queue)] = [0 1] @l + [1] [0 0] [0] >= [0 1] @l + [1] [0 0] [0] = [c_8(enqueues#1^#(@l, @queue))] [enqueues#1^#(::(@x, @xs), @queue)] = [0 1] @x + [0 1] @xs + [2] [0 0] [0 0] [1] > [0 1] @xs + [1] [0 0] [0] = [c_9(enqueues^#(@xs, enqueue(@x, @queue)))] [copyover^#(@copyover@1, @copyover@2)] = [0] [1] >= [0] [0] = [c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2)))] [copyover#1^#(tuple#2(@inq, @outq))] = [0 0] @outq + [0] [0 1] [0] >= [0] [0] = [c_11(copyover#2^#(@inq, @outq))] [copyover#2^#(::(@x, @xs), @outq)] = [0] [1] >= [0] [0] = [c_12(copyover^#(@xs, ::(@x, @outq)))] [dequeue#2^#(nil(), @inq)] = [0 2] @inq + [0] [1 1] [0] >= [0 2] @inq + [0] [0 0] [0] = [c_13(dequeue#3^#(@inq))] [dequeue#3^#(::(@x, @xs))] = [0 2] @x + [0 2] @xs + [2] [0 0] [0 0] [0] >= [0 2] @x + [0 2] @xs + [2] [0 0] [0 0] [0] = [c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil()))] [dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4))] = [0 2] @dequeue@3 + [0 2] @dequeue@4 + [0] [0 0] [0 0] [0] >= [0 2] @dequeue@3 + [0 2] @dequeue@4 + [0] [0 0] [0 0] [0] = [c_15(dequeue^#(@dequeue@3, @dequeue@4))] [startBreadth#1^#(::(@x, @xs))] = [0 2] @x + [2 0] @xs + [4] [0 2] [2 0] [4] >= [2 0] @xs + [4] [2 0] [4] = [startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 2] @breadth@1 + [0 4] @breadth@2 + [2] [0 2] [0 2] [2] >= [0 2] @breadth@1 + [0 2] @breadth@2 + [2] [0 0] [0 0] [2] = [breadth^#(@breadth@1, @breadth@2)] Consider the set of all dependency pairs DPs: { 1: dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 2: dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , 3: enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , 4: copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 5: copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , 6: copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , 7: dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , 8: dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , 9: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) , 10: breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , 11: breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , 12: breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , 13: breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , 14: breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , 15: breadth#3^#(tuple#2(@x, @ys), @queue') -> enqueues^#(@ys, @queue') , 16: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , 17: enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , 18: startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , 19: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Processor 'matrix interpretation of dimension 2' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {11,15,17}. These cover all (indirect) predecessors of dependency pairs {3,11,15,17,18,19}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We apply the transformation 'removetails' on the sub-problem: Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> enqueues^#(@ys, @queue') , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { breadth#3^#(tuple#2(@x, @ys), @queue') -> enqueues^#(@ys, @queue') , enqueues^#(@l, @queue) -> c_8(enqueues#1^#(@l, @queue)) , enqueues#1^#(::(@x, @xs), @queue) -> c_9(enqueues^#(@xs, enqueue(@x, @queue))) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We use the processor 'matrix interpretation of dimension 3' to orient following rules strictly. DPs: { 5: copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , 15: startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) } Trs: { breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(nil(), @b) -> nil() , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , empty(@x) -> tuple#2(nil(), nil()) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1}, Uargs(c_13) = {1}, Uargs(c_14) = {1, 2}, Uargs(c_15) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [0 0 1] [0 0 1] [0] [dequeue](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [0 0 0] [0] [tuple#2](x1, x2) = [0 0 0] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [1] [::](x1, x2) = [1 0 0] x1 + [1 1 0] x2 + [0] [1 0 0] [0 0 1] [1] [0 1 0] [1] [breadth#4](x1) = [1 0 0] x1 + [1] [0 1 0] [1] [0] [nil] = [0] [0] [0 0 1] [1 0 0] [0] [enqueues](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [1] [1 1 0] [0 0 1] [0] [0 0 0] [0 0 0] [0 0 1] [0 0 0] [0] [tuple#4](x1, x2, x3, x4) = [0 0 1] x1 + [0 0 1] x2 + [0 0 1] x3 + [1 1 1] x4 + [0] [0 0 1] [0 0 1] [0 0 0] [0 0 0] [0] [0 0 1] [0 0 1] [0 0 0] [0 0 0] [0] [children](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x2 + [0 0 1] x3 + [0 0 0] x4 + [1] [0 0 1] [0 0 1] [0 0 1] [1 0 0] [1] [0 0 0] [0 0 0] [1] [children#1](x1, x2, x3) = [0 0 1] x1 + [0 0 0] x3 + [0] [0 0 1] [1 0 0] [1] [0 0 0] [0 0 0] [0 0 0] [1] [children#3](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x3 + [0 0 1] x4 + [1] [1 0 0] [1 0 0] [0 0 1] [1] [1] [children#2](x1, x2) = [0] [1] [0 0 0] [0 0 0] [0] [copyover](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [0] [copyover#1](x1) = [1 1 0] x1 + [0] [0 0 1] [0] [0 0 0] [0 0 0] [0] [copyover#2](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 1] [0] [dequeue#1](x1) = [1 1 0] x1 + [1] [0 0 1] [0] [0 0 1] [0 0 1] [0] [dequeue#2](x1, x2) = [0 1 0] x1 + [0 0 1] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [0] [dequeue#3](x1) = [0 0 1] x1 + [1] [0 0 1] [0] [1 0 1] [0] [dequeue#4](x1) = [1 1 0] x1 + [1] [1 0 1] [0] [1] [empty](x1) = [1] [0] [1 0 0] [1 0 0] [1] [enqueue](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [0] [1 0 0] [0 0 1] [1] [1 0 0] [1 0 0] [1] [enqueue#1](x1, x2) = [0 1 0] x1 + [0 0 0] x2 + [0] [0 0 1] [1 0 0] [1] [0 0 1] [1 0 0] [0] [enqueues#1](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [1] [1 1 0] [0 0 1] [0] [0] [#unit] = [0] [0] [0 0 1] [0 0 1] [0] [breadth^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0 0 1] [0] [breadth#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0 0 1] [0] [dequeue^#](x1, x2) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [dequeue#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0 0 1] [0 0 1] [0] [breadth#2^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0 1 0] [0 0 1] [0] [breadth#3^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0] [breadth#4^#](x1) = [0] [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [0 0 1] [0] [breadth#5^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [enqueues^#](x1, x2) = [0] [0] [0] [enqueues#1^#](x1, x2) = [0] [0] [0] [children#1^#](x1, x2, x3) = [0] [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [0] [children#2^#](x1, x2) = [0] [0] [0 0 1] [0 0 0] [0] [copyover^#](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [0] [0 0 0] [1 0 0] [0] [1 0 0] [0] [copyover#1^#](x1) = [0 1 0] x1 + [0] [0 0 1] [0] [0 0 1] [0] [copyover#2^#](x1, x2) = [0 0 0] x1 + [0] [0 0 0] [0] [0 0 1] [0] [dequeue#2^#](x1, x2) = [1 0 0] x2 + [0] [0 0 0] [0] [0 0 1] [0] [dequeue#3^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [dequeue#4^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [empty^#](x1) = [0] [0] [0] [enqueue^#](x1, x2) = [0] [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [0] [startBreadth^#](x1) = [0] [0] [1 0 1] [1] [startBreadth#1^#](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [0 0 1] [0] [startBreadth#2^#](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [1 0 0] [0] [c_3](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_4](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [c_8](x1) = [0] [0] [0] [c_9](x1) = [0] [0] [1 0 0] [0] [c_10](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_11](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_12](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_13](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [1 0 0] [0] [c_14](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [1 0 0] [0] [c_15](x1) = [0 0 0] x1 + [0] [0 0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [0 0 1] [0 0 1] [0] [0 0 1] @dequeue@1 + [1 1 0] @dequeue@2 + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [0] [0 0 1] @dequeue@1 + [1 1 0] @dequeue@2 + [1] [0 0 1] [0 0 1] [0] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [0 0 1] [0 0 1] [0 0 @children@4, 1] [1 1 1] [1] @children@5, [0 0 0] @children@3 + [0 0 0] @children@4 + [0 0 @children@6))] 1] @children@5 + [0 0 0] @children@6 + [1] [0 0 1] [0 0 1] [0 0 1] [1 1 1] [1] > [0 0 1] [0 0 1] [0 0 0] [0 0 0] [0] [0 0 0] @children@3 + [0 0 0] @children@4 + [0 0 1] @children@5 + [0 0 0] @children@6 + [1] [0 0 1] [0 0 1] [0 0 1] [1 0 0] [1] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [0 0 1] [1 0 0] [0] [0 0 0] @l + [0 1 0] @queue + [1] [1 1 0] [0 0 1] [0] >= [0 0 1] [1 0 0] [0] [0 0 0] @l + [0 1 0] @queue + [1] [1 1 0] [0 0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [0 0 1] [0 0 1] [0 0 0] [0 0 0] [0] [0 0 0] @a + [0 0 0] @b + [0 0 1] @l1 + [0 0 0] @l2 + [1] [0 0 1] [0 0 1] [0 0 1] [1 0 0] [1] >= [0 0 1] [0 0 1] [0 0 0] [0 0 0] [0] [0 0 0] @a + [0 0 0] @b + [0 0 1] @l1 + [0 0 0] @l2 + [1] [0 0 1] [0 0 1] [0 0 1] [1 0 0] [1] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @l2 + [1 0 0] @x + [0 0 1] @xs + [1] [1 0 0] [1 0 0] [0 0 1] [2] >= [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @l2 + [0 0 0] @x + [0 0 1] @xs + [1] [1 0 0] [1 0 0] [0 0 1] [1] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [0 0 0] [1] [0 0 0] @l2 + [0] [1 0 0] [1] >= [1] [0] [1] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [0 0 0] [0 0 0] [1] [0 0 0] @x + [0 0 1] @xs + [1] [1 0 0] [0 0 1] [2] >= [0 0 0] [1] [0 0 1] @xs + [1] [0 0 1] [2] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [0 0 0] [0 0 0] [1] [0 0 0] @x + [0 0 1] @xs + [1] [1 0 0] [0 0 1] [1] > [0] [0] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [1] [0] [1] >= [1] [0] [1] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [1] [0] [1] > [0] [0] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [0 0 0] [0 0 0] [0] [0 0 1] @copyover@1 + [1 1 0] @copyover@2 + [0] [0 0 1] [0 0 1] [0] >= [0 0 0] [0 0 0] [0] [0 0 1] @copyover@1 + [1 1 0] @copyover@2 + [0] [0 0 1] [0 0 1] [0] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0 0 0] [0 0 0] [0] [0 0 1] @inq + [1 1 0] @outq + [0] [0 0 1] [0 0 1] [0] >= [0 0 0] [0 0 0] [0] [0 0 1] @inq + [1 1 0] @outq + [0] [0 0 1] [0 0 1] [0] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0 0 0] [0 0 0] [0 0 0] [0] [1 1 0] @outq + [1 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [1 0 0] [0 0 1] [1] >= [0 0 0] [0 0 0] [0 0 0] [0] [1 1 0] @outq + [1 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [1 0 0] [0 0 1] [1] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0 0 0] [0] [1 1 0] @outq + [0] [0 0 1] [0] >= [0 0 0] [0] [1 1 0] @outq + [0] [0 0 1] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [0 0 1] [0 0 1] [0] [0 0 1] @inq + [1 1 0] @outq + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [0] [0 0 1] @inq + [0 1 0] @outq + [1] [0 0 1] [0 0 1] [0] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [0 0 1] [1 0 0] [0 0 1] [1] [0 0 1] @inq + [1 0 0] @y + [1 1 0] @ys + [1] [0 0 1] [1 0 0] [0 0 1] [1] > [0 0 1] [0 0 0] [0 0 1] [0] [0 0 0] @inq + [1 0 0] @y + [0 0 0] @ys + [1] [0 0 1] [1 0 0] [0 0 1] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [0 0 1] [0] [0 0 1] @inq + [1] [0 0 1] [0] >= [0 0 1] [0] [0 0 1] @inq + [1] [0 0 1] [0] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [1 0 0] [0 0 1] [1] [1 0 0] @x + [0 0 1] @xs + [2] [1 0 0] [0 0 1] [1] >= [1 0 0] [0 0 1] [1] [1 0 0] @x + [0 0 1] @xs + [2] [1 0 0] [0 0 1] [1] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [0] [1] [0] >= [0] [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [0 0 2] [0 0 1] [0] [0 0 1] @dequeue@3 + [1 1 0] @dequeue@4 + [1] [0 0 2] [0 0 1] [0] >= [0 0 1] [0 0 1] [0] [0 0 1] @dequeue@3 + [1 1 0] @dequeue@4 + [1] [0 0 1] [0 0 1] [0] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [1] [1] [0] > [0] [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0 0] [1 0 0] [1] [0 1 0] @queue + [0 0 0] @x + [0] [0 0 1] [1 0 0] [1] >= [1 0 0] [1 0 0] [1] [0 1 0] @queue + [0 0 0] @x + [0] [0 0 1] [1 0 0] [1] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 0 1] [0 0 0] [1 0 0] [1] [0 0 0] @inq + [1 1 0] @outq + [0 0 0] @x + [0] [0 0 1] [0 0 1] [1 0 0] [1] >= [0 0 1] [0 0 0] [1 0 0] [1] [0 0 0] @inq + [1 1 0] @outq + [0 0 0] @x + [0] [0 0 1] [0 0 1] [1 0 0] [1] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0 0] [1 0 0] [0 0 1] [1] [0 1 0] @queue + [0 0 0] @x + [0 0 0] @xs + [1] [0 0 1] [1 0 0] [1 1 0] [1] >= [1 0 0] [1 0 0] [0 0 1] [1] [0 1 0] @queue + [0 0 0] @x + [0 0 0] @xs + [1] [0 0 1] [1 0 0] [1 1 0] [1] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0 0] [0] [0 1 0] @queue + [1] [0 0 1] [0] >= [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 0 1] [0 0 1] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [breadth#1^#(dequeue(@breadth@1, @breadth@2))] [breadth^#(@breadth@1, @breadth@2)] = [0 0 1] [0 0 1] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @breadth@1 + [0] [0 0 0] [0] = [dequeue^#(@breadth@1, @breadth@2)] [breadth#1^#(tuple#2(@queue', @elem))] = [0 0 1] [0 0 1] [0] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [0] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [0] = [breadth#2^#(@elem, @queue')] [dequeue^#(@dequeue@1, @dequeue@2)] = [0 0 1] [0] [0 0 0] @dequeue@1 + [0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @dequeue@1 + [0] [0 0 0] [0] = [c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)))] [dequeue#1^#(tuple#2(@inq, @outq))] = [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_4(dequeue#2^#(@outq, @inq))] [breadth#2^#(::(@z, @_@9), @queue')] = [0 0 1] [0 0 1] [1 0 0] [1] [0 0 0] @_@9 + [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0 0 0] [0] >= [0 0 1] [1 0 0] [1] [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0] = [breadth#3^#(breadth#4(@z), @queue')] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 0 1] [1 1 0] [0] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [1 1 0] [0] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] = [breadth#5^#(enqueues(@ys, @queue'))] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 0 1] [0 0 1] [0] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [0] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] = [breadth^#(@breadth@7, @breadth@8)] [copyover^#(@copyover@1, @copyover@2)] = [0 0 1] [0 0 0] [0] [0 0 0] @copyover@1 + [0 1 0] @copyover@2 + [0] [0 0 0] [1 0 0] [0] >= [0 0 1] [0] [0 0 0] @copyover@1 + [0] [0 0 0] [0] = [c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2)))] [copyover#1^#(tuple#2(@inq, @outq))] = [0 0 1] [0 0 0] [0] [0 0 0] @inq + [1 1 0] @outq + [0] [0 0 1] [0 0 1] [0] >= [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_11(copyover#2^#(@inq, @outq))] [copyover#2^#(::(@x, @xs), @outq)] = [1 0 0] [0 0 1] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] > [0 0 1] [0] [0 0 0] @xs + [0] [0 0 0] [0] = [c_12(copyover^#(@xs, ::(@x, @outq)))] [dequeue#2^#(nil(), @inq)] = [0 0 1] [0] [1 0 0] @inq + [0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_13(dequeue#3^#(@inq))] [dequeue#3^#(::(@x, @xs))] = [1 0 0] [0 0 1] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] >= [1 0 0] [0 0 1] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] = [c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil()))] [dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4))] = [0 0 1] [0] [0 0 0] @dequeue@3 + [0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @dequeue@3 + [0] [0 0 0] [0] = [c_15(dequeue^#(@dequeue@3, @dequeue@4))] [startBreadth#1^#(::(@x, @xs))] = [1 0 0] [0 0 1] [3] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] > [0 0 1] [1] [0 0 0] @xs + [1] [0 0 0] [1] = [startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 0 1] [0 0 1] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [1] [0 0 0] [0 0 0] [1] >= [0 0 1] [0 0 1] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [breadth^#(@breadth@1, @breadth@2)] Consider the set of all dependency pairs DPs: { 1: dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 2: dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , 3: copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 4: copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , 5: copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , 6: dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , 7: dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , 8: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) , 9: breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , 10: breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , 11: breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , 12: breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , 13: breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , 14: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , 15: startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , 16: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Processor 'matrix interpretation of dimension 3' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {5,15}. These cover all (indirect) predecessors of dependency pairs {5,15,16}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We decompose the input problem according to the dependency graph into the upper component { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } and lower component { copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) } Further, following extension rules are added to the lower component. { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , dequeue^#(@dequeue@1, @dequeue@2) -> dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)) , dequeue#1^#(tuple#2(@inq, @outq)) -> dequeue#2^#(@outq, @inq) , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , dequeue#2^#(nil(), @inq) -> dequeue#3^#(@inq) , dequeue#3^#(::(@x, @xs)) -> copyover^#(::(@x, @xs), nil()) , dequeue#3^#(::(@x, @xs)) -> dequeue#4^#(copyover(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue^#(@dequeue@3, @dequeue@4) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } TcT solves the upper component with certificate YES(O(1),O(n^1)). Sub-proof: ---------- We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_3(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_4(dequeue#2^#(@outq, @inq)) , dequeue#2^#(nil(), @inq) -> c_13(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_15(dequeue^#(@dequeue@3, @dequeue@4)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) Due to missing edges in the dependency-graph, the right-hand sides of following rules could be simplified: { dequeue#3^#(::(@x, @xs)) -> c_14(dequeue#4^#(copyover(::(@x, @xs), nil())), copyover^#(::(@x, @xs), nil())) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 3' to orient following rules strictly. DPs: { 4: dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) } Trs: { children#3(nil(), @b, @x, @xs) -> nil() , children#2(nil(), @b) -> nil() , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , empty(@x) -> tuple#2(nil(), nil()) , enqueues#1(nil(), @queue) -> @queue } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_8) = {1}, Uargs(c_9) = {1}, Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1}, Uargs(c_13) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [0 0 1] [0 0 1] [1] [dequeue](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [0 0 0] [0] [tuple#2](x1, x2) = [0 0 0] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [1] [::](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [1] [1 1 1] [0] [breadth#4](x1) = [0 0 1] x1 + [1] [1 1 0] [0] [0] [nil] = [0] [0] [1 1 0] [1 0 0] [1] [enqueues](x1, x2) = [0 0 1] x1 + [0 1 0] x2 + [1] [1 1 0] [0 0 1] [0] [1 0 0] [0 0 1] [0 0 0] [0 0 1] [0] [tuple#4](x1, x2, x3, x4) = [0 0 1] x1 + [0 1 0] x2 + [0 0 1] x3 + [0 0 1] x4 + [0] [0 0 0] [0 0 0] [0 0 1] [0 0 0] [0] [1 0 1] [0 1 1] [0 0 0] [0 0 0] [0] [children](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x2 + [0 0 1] x3 + [0 0 0] x4 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [1] [children#1](x1, x2, x3) = [0 0 1] x1 + [0 0 0] x3 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [0 0 0] [1] [children#3](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x3 + [0 0 1] x4 + [1] [0 0 1] [0 0 1] [0 0 1] [1] [0 0 0] [1] [children#2](x1, x2) = [0 0 0] x1 + [0] [0 0 1] [0] [0 0 0] [0 0 0] [0] [copyover](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [0] [copyover#1](x1) = [1 1 0] x1 + [0] [0 0 1] [0] [0 0 0] [0 0 0] [0] [copyover#2](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 1] [1] [dequeue#1](x1) = [1 1 0] x1 + [1] [0 0 1] [0] [0 0 1] [0 0 1] [1] [dequeue#2](x1, x2) = [0 1 0] x1 + [0 0 1] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [1] [dequeue#3](x1) = [0 0 1] x1 + [1] [0 0 1] [0] [0 0 1] [1] [dequeue#4](x1) = [1 1 0] x1 + [1] [0 0 1] [0] [1] [empty](x1) = [1] [1] [0 0 1] [1 0 0] [1] [enqueue](x1, x2) = [0 0 1] x1 + [0 1 0] x2 + [1] [0 0 1] [0 0 1] [1] [1 0 0] [0 0 1] [1] [enqueue#1](x1, x2) = [0 1 0] x1 + [0 0 0] x2 + [1] [0 0 1] [0 0 1] [1] [1 1 0] [1 0 0] [1] [enqueues#1](x1, x2) = [0 0 1] x1 + [0 1 0] x2 + [1] [1 1 0] [0 0 1] [0] [0] [#unit] = [0] [0] [0 0 1] [0 0 1] [0] [breadth^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0 0 1] [0] [breadth#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0 0 1] [0] [dequeue^#](x1, x2) = [0 0 0] x1 + [1] [0 0 0] [1] [1 0 0] [0] [dequeue#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0 0 1] [0 0 1] [0] [breadth#2^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0 1 0] [0 0 1] [0] [breadth#3^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0] [breadth#4^#](x1) = [0] [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [0 0 1] [0] [breadth#5^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [enqueues^#](x1, x2) = [0] [0] [0] [enqueues#1^#](x1, x2) = [0] [0] [0] [children#1^#](x1, x2, x3) = [0] [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [0] [children#2^#](x1, x2) = [0] [0] [0] [copyover^#](x1, x2) = [0] [0] [0] [copyover#1^#](x1) = [0] [0] [0] [copyover#2^#](x1, x2) = [0] [0] [0 0 0] [0 0 1] [0] [dequeue#2^#](x1, x2) = [0 1 0] x1 + [1 0 0] x2 + [1] [0 0 0] [0 0 0] [1] [0 0 1] [0] [dequeue#3^#](x1) = [0 0 0] x1 + [0] [0 1 1] [1] [1 0 0] [0] [dequeue#4^#](x1) = [1 0 0] x1 + [0] [1 0 0] [0] [0] [empty^#](x1) = [0] [0] [0] [enqueue^#](x1, x2) = [0] [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [0] [startBreadth^#](x1) = [0] [0] [1 0 1] [1] [startBreadth#1^#](x1) = [1 0 0] x1 + [0] [1 0 0] [0] [0 0 1] [1] [startBreadth#2^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [c_3](x1) = [0] [0] [0] [c_4](x1) = [0] [0] [0] [c_13](x1) = [0] [0] [0] [c_14](x1, x2) = [0] [0] [0] [c_15](x1) = [0] [0] [0] [c] = [0] [0] [1 0 0] [0] [c_1](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [1 0 0] [0] [c_2](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_3](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 1 1] [0] [c_4](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_5](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_6](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_7](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_8](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_9](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_10](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_11](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_12](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [1] [c_13](x1) = [0 0 0] x1 + [0] [0 0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@1 + [1 1 0] @dequeue@2 + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@1 + [1 1 0] @dequeue@2 + [1] [0 0 1] [0 0 1] [0] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [1 0 1] [0 1 1] [0 0 @children@4, 2] [0 0 2] [0] @children@5, [0 0 0] @children@3 + [0 0 0] @children@4 + [0 0 @children@6))] 1] @children@5 + [0 0 0] @children@6 + [1] [1 0 1] [0 1 1] [0 0 1] [0 0 2] [0] >= [1 0 1] [0 1 1] [0 0 0] [0 0 0] [0] [0 0 0] @children@3 + [0 0 0] @children@4 + [0 0 1] @children@5 + [0 0 0] @children@6 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [1 1 0] [1 0 0] [1] [0 0 1] @l + [0 1 0] @queue + [1] [1 1 0] [0 0 1] [0] >= [1 1 0] [1 0 0] [1] [0 0 1] @l + [0 1 0] @queue + [1] [1 1 0] [0 0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [1 0 1] [0 1 1] [0 0 0] [0 0 0] [0] [0 0 0] @a + [0 0 0] @b + [0 0 1] @l1 + [0 0 0] @l2 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [0 0 0] [0 0 0] [0] [0 0 0] @a + [0 0 0] @b + [0 0 1] @l1 + [0 0 0] @l2 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @l2 + [0 0 1] @x + [0 0 1] @xs + [1] [0 0 1] [0 0 1] [0 0 1] [1] >= [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @l2 + [0 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [0 0 1] [0 0 1] [1] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [0 0 0] [1] [0 0 0] @l2 + [0] [0 0 1] [0] >= [0 0 0] [1] [0 0 0] @l2 + [0] [0 0 1] [0] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [0 0 0] [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @x + [0 0 1] @xs + [0 0 0] @y + [0 0 0] @ys + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [2] >= [0 0 0] [1] [0 0 1] @xs + [1] [0 0 1] [2] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [0 0 0] [0 0 0] [1] [0 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [0 0 1] [1] > [0] [0] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [0 0 0] [0 0 0] [1] [0 0 0] @y + [0 0 0] @ys + [0] [0 0 1] [0 0 1] [1] >= [1] [0] [1] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [1] [0] [0] > [0] [0] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [0 0 0] [0 0 0] [0] [0 0 1] @copyover@1 + [1 1 0] @copyover@2 + [0] [0 0 1] [0 0 1] [0] >= [0 0 0] [0 0 0] [0] [0 0 1] @copyover@1 + [1 1 0] @copyover@2 + [0] [0 0 1] [0 0 1] [0] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0 0 0] [0 0 0] [0] [0 0 1] @inq + [1 1 0] @outq + [0] [0 0 1] [0 0 1] [0] >= [0 0 0] [0 0 0] [0] [0 0 1] @inq + [1 1 0] @outq + [0] [0 0 1] [0 0 1] [0] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0 0 0] [0 0 0] [0 0 0] [0] [1 1 0] @outq + [0 0 1] @x + [0 0 1] @xs + [1] [0 0 1] [0 0 1] [0 0 1] [1] >= [0 0 0] [0 0 0] [0 0 0] [0] [1 1 0] @outq + [0 0 1] @x + [0 0 1] @xs + [1] [0 0 1] [0 0 1] [0 0 1] [1] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0 0 0] [0] [1 1 0] @outq + [0] [0 0 1] [0] >= [0 0 0] [0] [1 1 0] @outq + [0] [0 0 1] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [0 0 1] [0 0 1] [1] [0 0 1] @inq + [1 1 0] @outq + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @inq + [0 1 0] @outq + [1] [0 0 1] [0 0 1] [0] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [0 0 1] [0 0 1] [0 0 1] [2] [0 0 1] @inq + [0 0 1] @y + [1 1 0] @ys + [1] [0 0 1] [0 0 1] [0 0 1] [1] > [0 0 1] [0 0 0] [0 0 1] [0] [0 0 0] @inq + [0 0 1] @y + [0 0 0] @ys + [1] [0 0 1] [0 0 1] [0 0 1] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [0 0 1] [1] [0 0 1] @inq + [1] [0 0 1] [0] >= [0 0 1] [1] [0 0 1] @inq + [1] [0 0 1] [0] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [0 0 1] [0 0 1] [2] [0 0 1] @x + [0 0 1] @xs + [2] [0 0 1] [0 0 1] [1] >= [0 0 1] [0 0 1] [2] [0 0 1] @x + [0 0 1] @xs + [2] [0 0 1] [0 0 1] [1] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [1] [1] [0] > [0] [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@3 + [1 1 0] @dequeue@4 + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@3 + [1 1 0] @dequeue@4 + [1] [0 0 1] [0 0 1] [0] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [1] [1] [1] > [0] [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0 0] [0 0 1] [1] [0 1 0] @queue + [0 0 1] @x + [1] [0 0 1] [0 0 1] [1] >= [1 0 0] [0 0 1] [1] [0 1 0] @queue + [0 0 0] @x + [1] [0 0 1] [0 0 1] [1] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 0 1] [0 0 0] [0 0 1] [1] [0 0 0] @inq + [1 1 0] @outq + [0 0 0] @x + [1] [0 0 1] [0 0 1] [0 0 1] [1] >= [0 0 1] [0 0 0] [0 0 1] [1] [0 0 0] @inq + [1 1 0] @outq + [0 0 0] @x + [0] [0 0 1] [0 0 1] [0 0 1] [1] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0 0] [0 0 1] [1 1 0] [2] [0 1 0] @queue + [0 0 1] @x + [0 0 1] @xs + [2] [0 0 1] [0 0 1] [1 1 0] [1] >= [1 0 0] [0 0 1] [1 1 0] [2] [0 1 0] @queue + [0 0 1] @x + [0 0 1] @xs + [2] [0 0 1] [0 0 1] [1 1 0] [1] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0 0] [1] [0 1 0] @queue + [1] [0 0 1] [0] > [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 0 1] [0 0 1] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2)))] [breadth^#(@breadth@1, @breadth@2)] = [0 0 1] [0 0 1] [0] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @breadth@1 + [0] [0 0 0] [0] = [c_7(dequeue^#(@breadth@1, @breadth@2))] [breadth#1^#(tuple#2(@queue', @elem))] = [0 0 1] [0 0 1] [0] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [0] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [0] = [c_8(breadth#2^#(@elem, @queue'))] [dequeue^#(@dequeue@1, @dequeue@2)] = [0 0 1] [0] [0 0 0] @dequeue@1 + [1] [0 0 0] [1] >= [0 0 1] [0] [0 0 0] @dequeue@1 + [1] [0 0 0] [1] = [c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)))] [dequeue#1^#(tuple#2(@inq, @outq))] = [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_2(dequeue#2^#(@outq, @inq))] [breadth#2^#(::(@z, @_@9), @queue')] = [0 0 1] [0 0 1] [0 0 1] [1] [0 0 0] @_@9 + [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [1] [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0] = [c_9(breadth#3^#(breadth#4(@z), @queue'))] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 0 1] [1 1 0] [0] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [1 1 0] [0] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] = [c_10(breadth#5^#(enqueues(@ys, @queue')))] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 0 1] [0 0 1] [0] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [0] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] = [c_11(breadth^#(@breadth@7, @breadth@8))] [dequeue#2^#(nil(), @inq)] = [0 0 1] [0] [1 0 0] @inq + [1] [0 0 0] [1] >= [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_3(dequeue#3^#(@inq))] [dequeue#3^#(::(@x, @xs))] = [0 0 1] [0 0 1] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 2] [1 1 1] [2] > [0] [0] [0] = [c_4(dequeue#4^#(copyover(::(@x, @xs), nil())))] [dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4))] = [0 0 1] [0] [0 0 1] @dequeue@3 + [0] [0 0 1] [0] >= [0 0 1] [0] [0 0 0] @dequeue@3 + [0] [0 0 0] [0] = [c_5(dequeue^#(@dequeue@3, @dequeue@4))] [startBreadth#1^#(::(@x, @xs))] = [0 0 1] [0 0 1] [3] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] >= [0 0 1] [3] [0 0 0] @xs + [0] [0 0 0] [0] = [c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_13(breadth^#(@breadth@1, @breadth@2))] Consider the set of all dependency pairs DPs: { 1: dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 2: dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , 3: dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , 4: dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , 5: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , 6: breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , 7: breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , 8: breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , 9: breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , 10: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , 11: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , 12: startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , 13: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Processor 'matrix interpretation of dimension 3' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {4}. These cover all (indirect) predecessors of dependency pairs {4,5,12,13}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 3' to orient following rules strictly. DPs: { 3: dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) } Trs: { children#3(nil(), @b, @x, @xs) -> nil() } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_8) = {1}, Uargs(c_9) = {1}, Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1}, Uargs(c_13) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [1 0 0] [1 0 0] [0] [dequeue](x1, x2) = [1 0 0] x1 + [1 0 0] x2 + [0] [1 0 0] [1 0 0] [0] [1 0 0] [1 0 0] [0] [tuple#2](x1, x2) = [1 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 1 1] [0] [0 1 0] [1 0 0] [1] [::](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [1] [0 1 0] [0 1 1] [0] [1 0 0] [0] [breadth#4](x1) = [1 0 1] x1 + [1] [0 1 0] [1] [0] [nil] = [0] [0] [0 1 1] [1 0 0] [0] [enqueues](x1, x2) = [0 1 1] x1 + [0 1 1] x2 + [1] [0 0 0] [0 0 1] [0] [1 0 0] [1 0 0] [1 0 0] [1 0 0] [0] [tuple#4](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x2 + [1 0 0] x3 + [0 0 0] x4 + [0] [0 1 1] [0 1 0] [0 0 0] [0 0 0] [0] [1 0 0] [1 0 0] [1 0 0] [1 0 0] [0] [children](x1, x2, x3, x4) = [1 1 1] x1 + [1 1 0] x2 + [0 0 0] x3 + [0 0 0] x4 + [0] [0 0 0] [0 0 0] [1 0 0] [0 0 0] [1] [1 0 0] [1 0 0] [0] [children#1](x1, x2, x3) = [0 0 0] x1 + [0 0 0] x3 + [1] [1 0 0] [0 0 0] [0] [1 0 0] [0 0 0] [1 0 0] [1] [children#3](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x3 + [0 0 0] x4 + [1] [0 0 0] [0 1 0] [1 0 0] [1] [1 0 0] [0] [children#2](x1, x2) = [0 0 0] x1 + [1] [0 0 0] [0] [1 0 0] [1 0 0] [0] [copyover](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [1 0 0] [0 1 1] [0] [1 0 0] [0] [copyover#1](x1) = [0 0 0] x1 + [0] [0 1 1] [0] [1 0 0] [1 0 0] [0] [copyover#2](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [1 0 0] [0 1 1] [0] [1 0 0] [0] [dequeue#1](x1) = [1 0 0] x1 + [0] [1 0 0] [0] [1 0 0] [1 0 0] [0] [dequeue#2](x1, x2) = [1 0 0] x1 + [1 0 0] x2 + [0] [1 0 0] [1 0 0] [0] [1 0 0] [0] [dequeue#3](x1) = [1 0 0] x1 + [0] [1 0 0] [0] [1 1 0] [0] [dequeue#4](x1) = [1 1 0] x1 + [0] [1 0 0] [0] [1 0 0] [0] [empty](x1) = [1 0 1] x1 + [1] [0 0 0] [1] [0 1 0] [1 0 0] [1] [enqueue](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [1] [0 0 0] [0 0 1] [0] [1 0 0] [0 1 0] [1] [enqueue#1](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [1] [0 0 1] [0 0 0] [0] [0 1 1] [1 0 0] [0] [enqueues#1](x1, x2) = [0 1 1] x1 + [0 1 1] x2 + [1] [0 0 0] [0 0 1] [0] [0] [#unit] = [1] [1] [1 0 0] [1 0 0] [1] [breadth^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [1 0 0] [1] [breadth#1^#](x1) = [0 0 0] x1 + [1] [0 0 0] [0] [1 0 0] [1] [dequeue^#](x1, x2) = [0 0 0] x1 + [1] [0 0 0] [1] [0 1 0] [1] [dequeue#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [1 0 0] [1] [breadth#2^#](x1, x2) = [1 1 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0 0 1] [1 0 0] [1] [breadth#3^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0] [breadth#4^#](x1) = [0] [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [1 0 0] [1] [breadth#5^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [enqueues^#](x1, x2) = [0] [0] [0] [enqueues#1^#](x1, x2) = [0] [0] [0] [children#1^#](x1, x2, x3) = [0] [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [0] [children#2^#](x1, x2) = [0] [0] [0] [copyover^#](x1, x2) = [0] [0] [0] [copyover#1^#](x1) = [0] [0] [0] [copyover#2^#](x1, x2) = [0] [0] [1 0 0] [1] [dequeue#2^#](x1, x2) = [0 0 0] x2 + [1] [0 0 0] [1] [1 0 0] [0] [dequeue#3^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0 1 0] [1] [dequeue#4^#](x1) = [0 0 0] x1 + [0] [0 0 1] [0] [0] [empty^#](x1) = [0] [0] [0] [enqueue^#](x1, x2) = [0] [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [0] [startBreadth^#](x1) = [0] [0] [1 0 1] [1] [startBreadth#1^#](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [1 0 0] [1] [startBreadth#2^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [c_3](x1) = [0] [0] [0] [c_4](x1) = [0] [0] [0] [c_13](x1) = [0] [0] [0] [c_14](x1, x2) = [0] [0] [0] [c_15](x1) = [0] [0] [0] [c] = [0] [0] [1 0 0] [0] [c_1](x1) = [0 0 0] x1 + [1] [0 0 0] [0] [1 0 0] [0] [c_2](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_3](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 1 0] [0] [c_4](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_5](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_6](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_7](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_8](x1) = [0 0 0] x1 + [1] [0 0 0] [0] [1 0 0] [0] [c_9](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_10](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_11](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_12](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_13](x1) = [0 1 0] x1 + [0] [0 0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [1 0 0] [1 0 0] [0] [1 0 0] @dequeue@1 + [1 0 0] @dequeue@2 + [0] [1 0 0] [1 0 0] [0] >= [1 0 0] [1 0 0] [0] [1 0 0] @dequeue@1 + [1 0 0] @dequeue@2 + [0] [1 0 0] [1 0 0] [0] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [1 0 0] [1 0 0] [1 0 @children@4, 0] [1 0 0] [0] @children@5, [1 1 1] @children@3 + [1 1 0] @children@4 + [1 0 @children@6))] 0] @children@5 + [1 0 0] @children@6 + [1] [0 0 0] [0 0 0] [1 0 0] [0 0 0] [1] >= [1 0 0] [1 0 0] [1 0 0] [1 0 0] [0] [1 1 1] @children@3 + [1 1 0] @children@4 + [0 0 0] @children@5 + [0 0 0] @children@6 + [0] [0 0 0] [0 0 0] [1 0 0] [0 0 0] [1] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [0 1 1] [1 0 0] [0] [0 1 1] @l + [0 1 1] @queue + [1] [0 0 0] [0 0 1] [0] >= [0 1 1] [1 0 0] [0] [0 1 1] @l + [0 1 1] @queue + [1] [0 0 0] [0 0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [1 0 0] [1 0 0] [1 0 0] [1 0 0] [0] [1 1 1] @a + [1 1 0] @b + [0 0 0] @l1 + [0 0 0] @l2 + [0] [0 0 0] [0 0 0] [1 0 0] [0 0 0] [1] >= [1 0 0] [1 0 0] [1 0 0] [1 0 0] [0] [1 0 0] @a + [1 0 0] @b + [0 0 0] @l1 + [0 0 0] @l2 + [0] [0 0 0] [0 0 0] [1 0 0] [0 0 0] [1] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [1 0 0] [0 1 0] [1 0 0] [1] [0 0 0] @l2 + [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 1 0] [1 0 0] [1] >= [1 0 0] [0 0 0] [1 0 0] [1] [0 0 0] @l2 + [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 1 0] [1 0 0] [1] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [1 0 0] [0] [0 0 0] @l2 + [1] [0 0 0] [0] >= [1 0 0] [0] [0 0 0] @l2 + [1] [0 0 0] [0] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [0 0 0] [1 0 0] [0 1 0] [1 0 0] [2] [0 0 0] @x + [0 0 0] @xs + [0 0 0] @y + [0 0 0] @ys + [1] [0 1 0] [1 0 0] [0 0 0] [0 0 0] [1] >= [1 0 0] [2] [0 0 0] @xs + [1] [1 0 0] [1] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [0 0 0] [1 0 0] [1] [0 0 0] @x + [0 0 0] @xs + [1] [0 1 0] [1 0 0] [1] > [0] [0] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [0 1 0] [1 0 0] [1] [0 0 0] @y + [0 0 0] @ys + [1] [0 0 0] [0 0 0] [0] >= [1] [1] [0] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [0] [1] [0] >= [0] [0] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [1 0 0] [1 0 0] [0] [0 0 0] @copyover@1 + [0 0 0] @copyover@2 + [0] [1 0 0] [0 1 1] [0] >= [1 0 0] [1 0 0] [0] [0 0 0] @copyover@1 + [0 0 0] @copyover@2 + [0] [1 0 0] [0 1 1] [0] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [1 0 0] [1 0 0] [0] [0 0 0] @inq + [0 0 0] @outq + [0] [1 0 0] [0 1 1] [0] >= [1 0 0] [1 0 0] [0] [0 0 0] @inq + [0 0 0] @outq + [0] [1 0 0] [0 1 1] [0] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [1 0 0] [0 1 0] [1 0 0] [1] [0 0 0] @outq + [0 0 0] @x + [0 0 0] @xs + [0] [0 1 1] [0 1 0] [1 0 0] [1] >= [1 0 0] [0 1 0] [1 0 0] [1] [0 0 0] @outq + [0 0 0] @x + [0 0 0] @xs + [0] [0 1 1] [0 1 0] [1 0 0] [1] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [1 0 0] [0] [0 0 0] @outq + [0] [0 1 1] [0] >= [1 0 0] [0] [0 0 0] @outq + [0] [0 1 1] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [1 0 0] [1 0 0] [0] [1 0 0] @inq + [1 0 0] @outq + [0] [1 0 0] [1 0 0] [0] >= [1 0 0] [1 0 0] [0] [1 0 0] @inq + [1 0 0] @outq + [0] [1 0 0] [1 0 0] [0] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [1 0 0] [0 1 0] [1 0 0] [1] [1 0 0] @inq + [0 1 0] @y + [1 0 0] @ys + [1] [1 0 0] [0 1 0] [1 0 0] [1] >= [1 0 0] [0 1 0] [1 0 0] [1] [1 0 0] @inq + [0 0 0] @y + [1 0 0] @ys + [0] [0 0 0] [0 1 0] [0 0 0] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [1 0 0] [0] [1 0 0] @inq + [0] [1 0 0] [0] >= [1 0 0] [0] [1 0 0] @inq + [0] [1 0 0] [0] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [0 1 0] [1 0 0] [1] [0 1 0] @x + [1 0 0] @xs + [1] [0 1 0] [1 0 0] [1] >= [0 1 0] [1 0 0] [1] [0 1 0] @x + [1 0 0] @xs + [1] [0 1 0] [1 0 0] [1] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [0] [0] [0] >= [0] [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [2 0 0] [1 0 0] [0] [2 0 0] @dequeue@3 + [1 0 0] @dequeue@4 + [0] [1 0 0] [1 0 0] [0] >= [1 0 0] [1 0 0] [0] [1 0 0] @dequeue@3 + [1 0 0] @dequeue@4 + [0] [1 0 0] [1 0 0] [0] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [1 0 0] [0] [1 0 1] @x + [1] [0 0 0] [1] >= [0] [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0 0] [0 1 0] [1] [0 1 0] @queue + [0 1 0] @x + [1] [0 0 1] [0 0 0] [0] >= [1 0 0] [0 1 0] [1] [0 1 0] @queue + [0 1 0] @x + [1] [0 0 1] [0 0 0] [0] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [1 0 0] [1 0 0] [0 1 0] [1] [1 0 0] @inq + [0 0 0] @outq + [0 1 0] @x + [1] [0 0 0] [0 1 1] [0 0 0] [0] >= [1 0 0] [1 0 0] [0 1 0] [1] [1 0 0] @inq + [0 0 0] @outq + [0 1 0] @x + [1] [0 0 0] [0 1 1] [0 0 0] [0] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0 0] [0 1 0] [0 1 1] [1] [0 1 1] @queue + [0 1 0] @x + [0 1 1] @xs + [2] [0 0 1] [0 0 0] [0 0 0] [0] >= [1 0 0] [0 1 0] [0 1 1] [1] [0 1 1] @queue + [0 1 0] @x + [0 1 1] @xs + [2] [0 0 1] [0 0 0] [0 0 0] [0] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0 0] [0] [0 1 1] @queue + [1] [0 0 1] [0] >= [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [1 0 0] [1 0 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [1 0 0] [1 0 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2)))] [breadth^#(@breadth@1, @breadth@2)] = [1 0 0] [1 0 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [1 0 0] [1] [0 0 0] @breadth@1 + [0] [0 0 0] [0] = [c_7(dequeue^#(@breadth@1, @breadth@2))] [breadth#1^#(tuple#2(@queue', @elem))] = [1 0 0] [1 0 0] [1] [0 0 0] @elem + [0 0 0] @queue' + [1] [0 0 0] [0 0 0] [0] >= [1 0 0] [1 0 0] [1] [0 0 0] @elem + [0 0 0] @queue' + [1] [0 0 0] [0 0 0] [0] = [c_8(breadth#2^#(@elem, @queue'))] [dequeue^#(@dequeue@1, @dequeue@2)] = [1 0 0] [1] [0 0 0] @dequeue@1 + [1] [0 0 0] [1] >= [1 0 0] [1] [0 0 0] @dequeue@1 + [1] [0 0 0] [0] = [c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)))] [dequeue#1^#(tuple#2(@inq, @outq))] = [1 0 0] [1] [0 0 0] @inq + [0] [0 0 0] [0] >= [1 0 0] [1] [0 0 0] @inq + [0] [0 0 0] [0] = [c_2(dequeue#2^#(@outq, @inq))] [breadth#2^#(::(@z, @_@9), @queue')] = [1 0 0] [1 0 0] [0 1 0] [2] [1 0 0] @_@9 + [0 0 0] @queue' + [0 1 0] @z + [2] [0 0 0] [0 0 0] [0 0 0] [0] >= [1 0 0] [0 1 0] [2] [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0] = [c_9(breadth#3^#(breadth#4(@z), @queue'))] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [1 0 0] [0 1 1] [1] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] >= [1 0 0] [0 1 1] [1] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] = [c_10(breadth#5^#(enqueues(@ys, @queue')))] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [1 0 0] [1 0 0] [1] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] >= [1 0 0] [1 0 0] [1] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] = [c_11(breadth^#(@breadth@7, @breadth@8))] [dequeue#2^#(nil(), @inq)] = [1 0 0] [1] [0 0 0] @inq + [1] [0 0 0] [1] > [1 0 0] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_3(dequeue#3^#(@inq))] [dequeue#3^#(::(@x, @xs))] = [0 1 0] [1 0 0] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] >= [1] [0] [0] = [c_4(dequeue#4^#(copyover(::(@x, @xs), nil())))] [dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4))] = [1 0 0] [0 0 0] [1] [0 0 0] @dequeue@3 + [0 0 0] @dequeue@4 + [0] [0 0 0] [0 1 1] [0] >= [1 0 0] [1] [0 0 0] @dequeue@3 + [0] [0 0 0] [0] = [c_5(dequeue^#(@dequeue@3, @dequeue@4))] [startBreadth#1^#(::(@x, @xs))] = [0 2 0] [1 1 1] [2] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] >= [1 0 0] [2] [0 0 0] @xs + [0] [0 0 0] [0] = [c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [1 0 0] [1 0 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [1 0 0] [1 0 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_13(breadth^#(@breadth@1, @breadth@2))] Consider the set of all dependency pairs DPs: { 1: dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 2: dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , 3: dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , 4: breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , 5: breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , 6: breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , 7: breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , 8: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , 9: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , 10: dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , 11: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , 12: startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , 13: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Processor 'matrix interpretation of dimension 3' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {3}. These cover all (indirect) predecessors of dependency pairs {3,10,11,12,13}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 3' to orient following rules strictly. DPs: { 2: dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) } Trs: { children#3(nil(), @b, @x, @xs) -> nil() , children#2(nil(), @b) -> nil() , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , enqueues#1(nil(), @queue) -> @queue } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_8) = {1}, Uargs(c_9) = {1}, Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1}, Uargs(c_13) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [0 0 1] [0 0 1] [1] [dequeue](x1, x2) = [0 0 1] x1 + [0 0 1] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [0 0 0] [1] [tuple#2](x1, x2) = [0 0 0] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [1 0 0] [0 0 0] [1] [::](x1, x2) = [0 0 0] x1 + [1 1 0] x2 + [0] [1 0 0] [0 0 1] [1] [1 1 1] [1] [breadth#4](x1) = [1 0 0] x1 + [1] [1 1 1] [0] [0] [nil] = [0] [0] [1 1 0] [1 0 0] [1] [enqueues](x1, x2) = [0 0 1] x1 + [0 1 0] x2 + [1] [1 1 0] [0 0 1] [0] [0 0 0] [0 0 0] [0 0 1] [0 0 0] [0] [tuple#4](x1, x2, x3, x4) = [0 0 1] x1 + [0 0 1] x2 + [1 0 0] x3 + [0 0 1] x4 + [0] [0 0 0] [0 0 0] [0 0 0] [0 0 0] [0] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [1] [children](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x2 + [0 0 1] x3 + [0 0 0] x4 + [1] [0 0 1] [0 0 1] [1 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [1] [children#1](x1, x2, x3) = [0 0 1] x1 + [0 0 0] x3 + [0] [1 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [0 0 0] [1] [children#3](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x3 + [0 0 1] x4 + [1] [0 0 1] [1 0 0] [0 0 1] [1] [0 0 0] [1] [children#2](x1, x2) = [0 0 0] x1 + [0] [0 0 1] [0] [0 0 0] [0 0 0] [1] [copyover](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 0] [1] [copyover#1](x1) = [1 1 0] x1 + [0] [0 0 1] [0] [0 0 0] [0 0 0] [1] [copyover#2](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [1] [dequeue#1](x1) = [0 0 1] x1 + [1] [0 0 1] [0] [0 0 1] [0 0 1] [1] [dequeue#2](x1, x2) = [0 0 1] x1 + [0 0 1] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [1] [dequeue#3](x1) = [0 0 1] x1 + [1] [0 0 1] [0] [0 0 1] [1] [dequeue#4](x1) = [1 0 1] x1 + [0] [0 0 1] [0] [1] [empty](x1) = [1] [0] [1 0 0] [1 0 0] [1] [enqueue](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [1] [1 0 0] [0 0 1] [1] [1 0 0] [1 0 0] [1] [enqueue#1](x1, x2) = [0 1 0] x1 + [0 0 0] x2 + [1] [0 0 1] [1 0 0] [1] [1 1 0] [1 0 0] [1] [enqueues#1](x1, x2) = [0 0 1] x1 + [0 1 0] x2 + [1] [1 1 0] [0 0 1] [0] [0] [#unit] = [0] [0] [0 0 1] [0 0 1] [1] [breadth^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [1] [0 0 0] [0 0 0] [0] [0 0 1] [1] [breadth#1^#](x1) = [0 0 0] x1 + [1] [0 0 0] [0] [0 0 1] [1] [dequeue^#](x1, x2) = [0 0 0] x1 + [0] [0 0 0] [1] [1 0 0] [0] [dequeue#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0 0 1] [0 0 1] [1] [breadth#2^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0 1 0] [0 0 1] [1] [breadth#3^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0] [breadth#4^#](x1) = [0] [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [0 0 1] [1] [breadth#5^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [enqueues^#](x1, x2) = [0] [0] [0] [enqueues#1^#](x1, x2) = [0] [0] [0] [children#1^#](x1, x2, x3) = [0] [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [0] [children#2^#](x1, x2) = [0] [0] [0] [copyover^#](x1, x2) = [0] [0] [0] [copyover#1^#](x1) = [0] [0] [0] [copyover#2^#](x1, x2) = [0] [0] [0 0 1] [0] [dequeue#2^#](x1, x2) = [0 0 0] x2 + [1] [0 0 0] [1] [0 0 1] [0] [dequeue#3^#](x1) = [0 0 0] x1 + [1] [0 0 0] [0] [1 0 0] [0] [dequeue#4^#](x1) = [1 0 1] x1 + [0] [0 0 0] [0] [0] [empty^#](x1) = [0] [0] [0] [enqueue^#](x1, x2) = [0] [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [0] [startBreadth^#](x1) = [0] [0] [0 0 1] [1] [startBreadth#1^#](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [0 0 1] [1] [startBreadth#2^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [c_3](x1) = [0] [0] [0] [c_4](x1) = [0] [0] [0] [c_13](x1) = [0] [0] [0] [c_14](x1, x2) = [0] [0] [0] [c_15](x1) = [0] [0] [0] [c] = [0] [0] [1 0 0] [0] [c_1](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_2](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_3](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 1] [0] [c_4](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_5](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_6](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 1 0] [0] [c_7](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 1 1] [0] [c_8](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 1] [0] [c_9](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 1 1] [0] [c_10](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_11](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_12](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_13](x1) = [0 0 0] x1 + [0] [0 0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@1 + [0 0 1] @dequeue@2 + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@1 + [0 0 1] @dequeue@2 + [1] [0 0 1] [0 0 1] [0] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [0 0 1] [0 0 1] [1 0 @children@4, 1] [0 0 1] [1] @children@5, [0 0 0] @children@3 + [0 0 0] @children@4 + [0 0 @children@6))] 1] @children@5 + [0 0 0] @children@6 + [1] [0 0 1] [0 0 1] [1 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [0 0 1] [0 0 1] [1] [0 0 0] @children@3 + [0 0 0] @children@4 + [0 0 1] @children@5 + [0 0 0] @children@6 + [1] [0 0 1] [0 0 1] [1 0 1] [0 0 1] [0] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [1 1 0] [1 0 0] [1] [0 0 1] @l + [0 1 0] @queue + [1] [1 1 0] [0 0 1] [0] >= [1 1 0] [1 0 0] [1] [0 0 1] @l + [0 1 0] @queue + [1] [1 1 0] [0 0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [0 0 1] [0 0 1] [0 0 1] [0 0 1] [1] [0 0 0] @a + [0 0 0] @b + [0 0 1] @l1 + [0 0 0] @l2 + [1] [0 0 1] [0 0 1] [1 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [0 0 0] [0 0 0] [1] [0 0 0] @a + [0 0 0] @b + [0 0 1] @l1 + [0 0 0] @l2 + [1] [0 0 1] [0 0 1] [1 0 1] [0 0 1] [0] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @l2 + [1 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [2 0 0] [0 0 1] [2] >= [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @l2 + [0 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [1 0 0] [0 0 1] [1] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [0 0 0] [1] [0 0 0] @l2 + [0] [0 0 1] [0] >= [0 0 0] [1] [0 0 0] @l2 + [0] [0 0 1] [0] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [0 0 0] [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @x + [0 0 1] @xs + [0 0 0] @y + [0 0 0] @ys + [1] [1 0 0] [0 0 1] [1 0 0] [0 0 1] [2] >= [0 0 0] [1] [0 0 1] @xs + [1] [0 0 1] [2] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [0 0 0] [0 0 0] [1] [0 0 0] @x + [0 0 1] @xs + [1] [1 0 0] [0 0 1] [1] > [0] [0] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [0 0 0] [0 0 0] [1] [0 0 0] @y + [0 0 0] @ys + [0] [1 0 0] [0 0 1] [1] >= [1] [0] [1] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [1] [0] [0] > [0] [0] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [0 0 0] [0 0 0] [1] [0 0 1] @copyover@1 + [1 1 0] @copyover@2 + [1] [0 0 1] [0 0 1] [0] >= [0 0 0] [0 0 0] [1] [0 0 1] @copyover@1 + [1 1 0] @copyover@2 + [1] [0 0 1] [0 0 1] [0] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0 0 0] [0 0 0] [1] [0 0 1] @inq + [1 1 0] @outq + [1] [0 0 1] [0 0 1] [0] >= [0 0 0] [0 0 0] [1] [0 0 1] @inq + [1 1 0] @outq + [1] [0 0 1] [0 0 1] [0] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0 0 0] [0 0 0] [0 0 0] [1] [1 1 0] @outq + [1 0 0] @x + [0 0 1] @xs + [2] [0 0 1] [1 0 0] [0 0 1] [1] >= [0 0 0] [0 0 0] [0 0 0] [1] [1 1 0] @outq + [1 0 0] @x + [0 0 1] @xs + [2] [0 0 1] [1 0 0] [0 0 1] [1] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0 0 0] [1] [1 1 0] @outq + [1] [0 0 1] [0] >= [0 0 0] [1] [1 1 0] @outq + [0] [0 0 1] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [0 0 1] [0 0 1] [1] [0 0 1] @inq + [0 0 1] @outq + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @inq + [0 0 1] @outq + [1] [0 0 1] [0 0 1] [0] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [0 0 1] [1 0 0] [0 0 1] [2] [0 0 1] @inq + [1 0 0] @y + [0 0 1] @ys + [2] [0 0 1] [1 0 0] [0 0 1] [1] > [0 0 1] [0 0 0] [0 0 1] [1] [0 0 0] @inq + [1 0 0] @y + [0 0 0] @ys + [1] [0 0 1] [1 0 0] [0 0 1] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [0 0 1] [1] [0 0 1] @inq + [1] [0 0 1] [0] >= [0 0 1] [1] [0 0 1] @inq + [1] [0 0 1] [0] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [1 0 0] [0 0 1] [2] [1 0 0] @x + [0 0 1] @xs + [2] [1 0 0] [0 0 1] [1] >= [1 0 0] [0 0 1] [2] [1 0 0] @x + [0 0 1] @xs + [2] [1 0 0] [0 0 1] [1] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [1] [1] [0] >= [1] [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [0 0 1] [0 0 1] [1] [0 0 2] @dequeue@3 + [0 0 1] @dequeue@4 + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@3 + [0 0 1] @dequeue@4 + [1] [0 0 1] [0 0 1] [0] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [1] [1] [0] >= [1] [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0 0] [1 0 0] [1] [0 1 0] @queue + [0 0 0] @x + [1] [0 0 1] [1 0 0] [1] >= [1 0 0] [1 0 0] [1] [0 1 0] @queue + [0 0 0] @x + [1] [0 0 1] [1 0 0] [1] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 0 1] [0 0 0] [1 0 0] [2] [0 0 0] @inq + [1 1 0] @outq + [0 0 0] @x + [1] [0 0 1] [0 0 1] [1 0 0] [1] >= [0 0 1] [0 0 0] [1 0 0] [2] [0 0 0] @inq + [1 1 0] @outq + [0 0 0] @x + [0] [0 0 1] [0 0 1] [1 0 0] [1] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0 0] [1 0 0] [1 1 0] [2] [0 1 0] @queue + [1 0 0] @x + [0 0 1] @xs + [2] [0 0 1] [1 0 0] [1 1 0] [1] >= [1 0 0] [1 0 0] [1 1 0] [2] [0 1 0] @queue + [0 0 0] @x + [0 0 1] @xs + [2] [0 0 1] [1 0 0] [1 1 0] [1] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0 0] [1] [0 1 0] @queue + [1] [0 0 1] [0] > [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [1] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2)))] [breadth^#(@breadth@1, @breadth@2)] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [1] [0 0 0] [0 0 0] [0] >= [0 0 1] [1] [0 0 0] @breadth@1 + [0] [0 0 0] [0] = [c_7(dequeue^#(@breadth@1, @breadth@2))] [breadth#1^#(tuple#2(@queue', @elem))] = [0 0 1] [0 0 1] [1] [0 0 0] @elem + [0 0 0] @queue' + [1] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [1] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [0] = [c_8(breadth#2^#(@elem, @queue'))] [dequeue^#(@dequeue@1, @dequeue@2)] = [0 0 1] [1] [0 0 0] @dequeue@1 + [0] [0 0 0] [1] >= [0 0 1] [1] [0 0 0] @dequeue@1 + [0] [0 0 0] [0] = [c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)))] [dequeue#1^#(tuple#2(@inq, @outq))] = [0 0 1] [1] [0 0 0] @inq + [0] [0 0 0] [0] > [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_2(dequeue#2^#(@outq, @inq))] [breadth#2^#(::(@z, @_@9), @queue')] = [0 0 1] [0 0 1] [1 0 0] [2] [0 0 0] @_@9 + [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0 0 0] [0] >= [0 0 1] [1 0 0] [2] [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0] = [c_9(breadth#3^#(breadth#4(@z), @queue'))] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 0 1] [1 1 0] [1] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [1 1 0] [1] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] = [c_10(breadth#5^#(enqueues(@ys, @queue')))] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [1] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] = [c_11(breadth^#(@breadth@7, @breadth@8))] [dequeue#2^#(nil(), @inq)] = [0 0 1] [0] [0 0 0] @inq + [1] [0 0 0] [1] >= [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_3(dequeue#3^#(@inq))] [dequeue#3^#(::(@x, @xs))] = [1 0 0] [0 0 1] [1] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [0] >= [1] [0] [0] = [c_4(dequeue#4^#(copyover(::(@x, @xs), nil())))] [dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4))] = [0 0 1] [0 0 0] [1] [0 0 2] @dequeue@3 + [0 0 1] @dequeue@4 + [1] [0 0 0] [0 0 0] [0] >= [0 0 1] [1] [0 0 0] @dequeue@3 + [0] [0 0 0] [0] = [c_5(dequeue^#(@dequeue@3, @dequeue@4))] [startBreadth#1^#(::(@x, @xs))] = [1 0 0] [0 0 1] [2] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] >= [0 0 1] [2] [0 0 0] @xs + [0] [0 0 0] [0] = [c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_13(breadth^#(@breadth@1, @breadth@2))] Consider the set of all dependency pairs DPs: { 1: dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 2: dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , 3: breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , 4: breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , 5: breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , 6: breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , 7: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , 8: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , 9: dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , 10: dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , 11: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , 12: startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , 13: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Processor 'matrix interpretation of dimension 3' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {2}. These cover all (indirect) predecessors of dependency pairs {2,9,10,11,12,13}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 3' to orient following rules strictly. DPs: { 1: dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 12: startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) } Trs: { children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(nil(), @b) -> nil() , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , empty(@x) -> tuple#2(nil(), nil()) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_3) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1}, Uargs(c_6) = {1}, Uargs(c_7) = {1}, Uargs(c_8) = {1}, Uargs(c_9) = {1}, Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1}, Uargs(c_13) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [0 0 1] [0 0 1] [1] [dequeue](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [0 0 0] [0] [tuple#2](x1, x2) = [0 0 0] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [1] [::](x1, x2) = [1 0 0] x1 + [1 1 0] x2 + [0] [1 0 0] [0 0 1] [1] [1 0 1] [1] [breadth#4](x1) = [1 0 0] x1 + [1] [0 0 1] [0] [0] [nil] = [0] [0] [0 1 1] [1 0 0] [0] [enqueues](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [1] [1 1 0] [0 0 1] [0] [0 0 0] [0 0 0] [0 0 1] [0 0 0] [0] [tuple#4](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x2 + [0 0 0] x3 + [0 0 0] x4 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] [0 0 1] [0 0 1] [0 0 0] [0 0 0] [1] [children](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x2 + [0 0 1] x3 + [0 0 0] x4 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [1] [children#1](x1, x2, x3) = [0 0 1] x1 + [0 0 0] x3 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [0 0 0] [0 0 0] [1] [children#3](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x3 + [0 0 1] x4 + [1] [0 0 1] [1 0 0] [0 0 1] [1] [0 0 0] [1] [children#2](x1, x2) = [0 0 0] x1 + [0] [0 0 1] [0] [0 0 0] [0 0 0] [0] [copyover](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 0] [0] [copyover#1](x1) = [1 1 0] x1 + [0] [0 0 1] [0] [0 0 0] [0 0 0] [0] [copyover#2](x1, x2) = [0 0 1] x1 + [1 1 0] x2 + [0] [0 0 1] [0 0 1] [0] [0 0 1] [1] [dequeue#1](x1) = [1 1 0] x1 + [1] [0 0 1] [0] [0 0 1] [0 0 1] [1] [dequeue#2](x1, x2) = [0 1 0] x1 + [0 0 1] x2 + [1] [0 0 1] [0 0 1] [0] [0 0 1] [1] [dequeue#3](x1) = [0 0 1] x1 + [1] [0 0 1] [0] [0 0 1] [1] [dequeue#4](x1) = [1 1 0] x1 + [1] [1 0 1] [0] [1] [empty](x1) = [1] [0] [1 0 0] [1 0 0] [1] [enqueue](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [0] [1 0 0] [0 0 1] [1] [1 0 0] [1 0 0] [1] [enqueue#1](x1, x2) = [0 1 0] x1 + [0 0 0] x2 + [0] [0 0 1] [1 0 0] [1] [0 1 1] [1 0 0] [0] [enqueues#1](x1, x2) = [0 0 0] x1 + [0 1 0] x2 + [1] [1 1 0] [0 0 1] [0] [0] [#unit] = [0] [0] [0 0 1] [0 0 1] [1] [breadth^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [1] [0 0 0] [0 0 0] [1] [0 0 1] [1] [breadth#1^#](x1) = [0 0 0] x1 + [0] [0 1 0] [0] [0 0 1] [1] [dequeue^#](x1, x2) = [0 0 0] x1 + [0] [0 0 0] [1] [1 0 0] [0] [dequeue#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0 0 1] [0 0 1] [1] [breadth#2^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [1] [0 0 0] [0 0 0] [0] [0 1 0] [0 0 1] [1] [breadth#3^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [0] [0] [breadth#4^#](x1) = [0] [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [0 0 1] [1] [breadth#5^#](x1) = [0 0 0] x1 + [0] [0 0 0] [1] [0] [enqueues^#](x1, x2) = [0] [0] [0] [enqueues#1^#](x1, x2) = [0] [0] [0] [children#1^#](x1, x2, x3) = [0] [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [0] [children#2^#](x1, x2) = [0] [0] [0] [copyover^#](x1, x2) = [0] [0] [0] [copyover#1^#](x1) = [0] [0] [0] [copyover#2^#](x1, x2) = [0] [0] [0 0 1] [0] [dequeue#2^#](x1, x2) = [0 0 0] x2 + [0] [0 0 0] [1] [0 0 1] [0] [dequeue#3^#](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [1 0 0] [1] [dequeue#4^#](x1) = [0 1 0] x1 + [0] [0 0 0] [0] [0] [empty^#](x1) = [0] [0] [0] [enqueue^#](x1, x2) = [0] [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [0] [startBreadth^#](x1) = [0] [0] [1 0 1] [1] [startBreadth#1^#](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [0 0 1] [1] [startBreadth#2^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [c_3](x1) = [0] [0] [0] [c_4](x1) = [0] [0] [0] [c_13](x1) = [0] [0] [0] [c_14](x1, x2) = [0] [0] [0] [c_15](x1) = [0] [0] [0] [c] = [0] [0] [1 0 0] [0] [c_1](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_2](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_3](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 1] [0] [c_4](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_5](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 1 0] [0] [c_6](x1) = [0 0 0] x1 + [1] [0 0 0] [0] [1 0 0] [0] [c_7](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_8](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_9](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_10](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_11](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_12](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_13](x1) = [0 0 0] x1 + [0] [0 0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@1 + [1 1 0] @dequeue@2 + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@1 + [1 1 0] @dequeue@2 + [1] [0 0 1] [0 0 1] [0] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [0 0 1] [0 0 1] [0 0 @children@4, 2] [0 0 1] [1] @children@5, [0 0 0] @children@3 + [0 0 0] @children@4 + [0 0 @children@6))] 1] @children@5 + [0 0 0] @children@6 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [0 0 0] [0 0 0] [1] [0 0 0] @children@3 + [0 0 0] @children@4 + [0 0 1] @children@5 + [0 0 0] @children@6 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [0 1 1] [1 0 0] [0] [0 0 0] @l + [0 1 0] @queue + [1] [1 1 0] [0 0 1] [0] >= [0 1 1] [1 0 0] [0] [0 0 0] @l + [0 1 0] @queue + [1] [1 1 0] [0 0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [0 0 1] [0 0 1] [0 0 0] [0 0 0] [1] [0 0 0] @a + [0 0 0] @b + [0 0 1] @l1 + [0 0 0] @l2 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] > [0 0 1] [0 0 1] [0 0 0] [0 0 0] [0] [0 0 0] @a + [0 0 0] @b + [0 0 1] @l1 + [0 0 0] @l2 + [1] [0 0 1] [0 0 1] [0 0 1] [0 0 1] [0] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @l2 + [1 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [1 0 0] [0 0 1] [1] >= [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @l2 + [0 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [1 0 0] [0 0 1] [1] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [0 0 0] [1] [0 0 0] @l2 + [0] [0 0 1] [0] >= [0 0 0] [1] [0 0 0] @l2 + [0] [0 0 1] [0] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [0 0 0] [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] @x + [0 0 1] @xs + [0 0 0] @y + [0 0 0] @ys + [1] [1 0 0] [0 0 1] [1 0 0] [0 0 1] [2] >= [0 0 0] [1] [0 0 1] @xs + [1] [0 0 1] [2] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [0 0 0] [0 0 0] [1] [0 0 0] @x + [0 0 1] @xs + [1] [1 0 0] [0 0 1] [1] > [0] [0] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [0 0 0] [0 0 0] [1] [0 0 0] @y + [0 0 0] @ys + [0] [1 0 0] [0 0 1] [1] >= [1] [0] [1] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [1] [0] [0] > [0] [0] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [0 0 0] [0 0 0] [0] [0 0 1] @copyover@1 + [1 1 0] @copyover@2 + [0] [0 0 1] [0 0 1] [0] >= [0 0 0] [0 0 0] [0] [0 0 1] @copyover@1 + [1 1 0] @copyover@2 + [0] [0 0 1] [0 0 1] [0] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0 0 0] [0 0 0] [0] [0 0 1] @inq + [1 1 0] @outq + [0] [0 0 1] [0 0 1] [0] >= [0 0 0] [0 0 0] [0] [0 0 1] @inq + [1 1 0] @outq + [0] [0 0 1] [0 0 1] [0] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0 0 0] [0 0 0] [0 0 0] [0] [1 1 0] @outq + [1 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [1 0 0] [0 0 1] [1] >= [0 0 0] [0 0 0] [0 0 0] [0] [1 1 0] @outq + [1 0 0] @x + [0 0 1] @xs + [1] [0 0 1] [1 0 0] [0 0 1] [1] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0 0 0] [0] [1 1 0] @outq + [0] [0 0 1] [0] >= [0 0 0] [0] [1 1 0] @outq + [0] [0 0 1] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [0 0 1] [0 0 1] [1] [0 0 1] @inq + [1 1 0] @outq + [1] [0 0 1] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @inq + [0 1 0] @outq + [1] [0 0 1] [0 0 1] [0] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [0 0 1] [1 0 0] [0 0 1] [2] [0 0 1] @inq + [1 0 0] @y + [1 1 0] @ys + [1] [0 0 1] [1 0 0] [0 0 1] [1] > [0 0 1] [0 0 0] [0 0 1] [0] [0 0 0] @inq + [1 0 0] @y + [0 0 0] @ys + [1] [0 0 1] [1 0 0] [0 0 1] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [0 0 1] [1] [0 0 1] @inq + [1] [0 0 1] [0] >= [0 0 1] [1] [0 0 1] @inq + [1] [0 0 1] [0] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [1 0 0] [0 0 1] [2] [1 0 0] @x + [0 0 1] @xs + [2] [1 0 0] [0 0 1] [1] >= [1 0 0] [0 0 1] [2] [1 0 0] @x + [0 0 1] @xs + [2] [1 0 0] [0 0 1] [1] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [1] [1] [0] > [0] [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@3 + [1 1 0] @dequeue@4 + [1] [0 0 2] [0 0 1] [0] >= [0 0 1] [0 0 1] [1] [0 0 1] @dequeue@3 + [1 1 0] @dequeue@4 + [1] [0 0 1] [0 0 1] [0] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [1] [1] [0] > [0] [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0 0] [1 0 0] [1] [0 1 0] @queue + [0 0 0] @x + [0] [0 0 1] [1 0 0] [1] >= [1 0 0] [1 0 0] [1] [0 1 0] @queue + [0 0 0] @x + [0] [0 0 1] [1 0 0] [1] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 0 1] [0 0 0] [1 0 0] [1] [0 0 0] @inq + [1 1 0] @outq + [0 0 0] @x + [0] [0 0 1] [0 0 1] [1 0 0] [1] >= [0 0 1] [0 0 0] [1 0 0] [1] [0 0 0] @inq + [1 1 0] @outq + [0 0 0] @x + [0] [0 0 1] [0 0 1] [1 0 0] [1] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0 0] [2 0 0] [1 1 1] [1] [0 1 0] @queue + [0 0 0] @x + [0 0 0] @xs + [1] [0 0 1] [1 0 0] [1 1 0] [1] >= [1 0 0] [1 0 0] [0 1 1] [1] [0 1 0] @queue + [0 0 0] @x + [0 0 0] @xs + [1] [0 0 1] [1 0 0] [1 1 0] [1] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0 0] [0] [0 1 0] @queue + [1] [0 0 1] [0] >= [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [1] [0 0 0] [0 0 0] [1] >= [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [1] [0 0 0] [0 0 0] [0] = [c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2)))] [breadth^#(@breadth@1, @breadth@2)] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [1] [0 0 0] [0 0 0] [1] >= [0 0 1] [1] [0 0 0] @breadth@1 + [0] [0 0 0] [0] = [c_7(dequeue^#(@breadth@1, @breadth@2))] [breadth#1^#(tuple#2(@queue', @elem))] = [0 0 1] [0 0 1] [1] [0 0 0] @elem + [0 0 0] @queue' + [0] [1 1 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [1] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [0] = [c_8(breadth#2^#(@elem, @queue'))] [dequeue^#(@dequeue@1, @dequeue@2)] = [0 0 1] [1] [0 0 0] @dequeue@1 + [0] [0 0 0] [1] > [0 0 1] [0] [0 0 0] @dequeue@1 + [0] [0 0 0] [0] = [c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)))] [dequeue#1^#(tuple#2(@inq, @outq))] = [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] >= [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_2(dequeue#2^#(@outq, @inq))] [breadth#2^#(::(@z, @_@9), @queue')] = [0 0 1] [0 0 1] [1 0 0] [2] [0 0 0] @_@9 + [0 0 0] @queue' + [0 0 0] @z + [1] [0 0 0] [0 0 0] [0 0 0] [0] >= [0 0 1] [1 0 0] [2] [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0] = [c_9(breadth#3^#(breadth#4(@z), @queue'))] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 0 1] [1 1 0] [1] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [1 1 0] [1] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [0] = [c_10(breadth#5^#(enqueues(@ys, @queue')))] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [1] >= [0 0 1] [0 0 1] [1] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [0] = [c_11(breadth^#(@breadth@7, @breadth@8))] [dequeue#2^#(nil(), @inq)] = [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [1] >= [0 0 1] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_3(dequeue#3^#(@inq))] [dequeue#3^#(::(@x, @xs))] = [1 0 0] [0 0 1] [1] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] >= [1] [0] [0] = [c_4(dequeue#4^#(copyover(::(@x, @xs), nil())))] [dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4))] = [0 0 1] [0 0 0] [1] [0 0 0] @dequeue@3 + [1 1 0] @dequeue@4 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [1] [0 0 0] @dequeue@3 + [0] [0 0 0] [0] = [c_5(dequeue^#(@dequeue@3, @dequeue@4))] [startBreadth#1^#(::(@x, @xs))] = [1 0 0] [0 0 1] [3] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] > [0 0 1] [2] [0 0 0] @xs + [0] [0 0 0] [0] = [c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] >= [0 0 1] [0 0 1] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [0] = [c_13(breadth^#(@breadth@1, @breadth@2))] Consider the set of all dependency pairs DPs: { 1: dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , 2: breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , 3: breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , 4: breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , 5: dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , 6: breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , 7: breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , 8: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , 9: dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , 10: dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , 11: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , 12: startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , 13: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Processor 'matrix interpretation of dimension 3' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {1,12}. These cover all (indirect) predecessors of dependency pairs {1,5,9,10,11,12,13}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We apply the transformation 'removetails' on the sub-problem: Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { breadth^#(@breadth@1, @breadth@2) -> c_6(breadth#1^#(dequeue(@breadth@1, @breadth@2))) , breadth^#(@breadth@1, @breadth@2) -> c_7(dequeue^#(@breadth@1, @breadth@2)) , breadth#1^#(tuple#2(@queue', @elem)) -> c_8(breadth#2^#(@elem, @queue')) , dequeue^#(@dequeue@1, @dequeue@2) -> c_1(dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))) , dequeue#1^#(tuple#2(@inq, @outq)) -> c_2(dequeue#2^#(@outq, @inq)) , breadth#2^#(::(@z, @_@9), @queue') -> c_9(breadth#3^#(breadth#4(@z), @queue')) , breadth#3^#(tuple#2(@x, @ys), @queue') -> c_10(breadth#5^#(enqueues(@ys, @queue'))) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> c_11(breadth^#(@breadth@7, @breadth@8)) , dequeue#2^#(nil(), @inq) -> c_3(dequeue#3^#(@inq)) , dequeue#3^#(::(@x, @xs)) -> c_4(dequeue#4^#(copyover(::(@x, @xs), nil()))) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> c_5(dequeue^#(@dequeue@3, @dequeue@4)) , startBreadth#1^#(::(@x, @xs)) -> c_12(startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> c_13(breadth^#(@breadth@1, @breadth@2)) } We apply the transformation 'usablerules' on the sub-problem: Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded We return to the main proof. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , dequeue^#(@dequeue@1, @dequeue@2) -> dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)) , dequeue#1^#(tuple#2(@inq, @outq)) -> dequeue#2^#(@outq, @inq) , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> dequeue#3^#(@inq) , dequeue#3^#(::(@x, @xs)) -> copyover^#(::(@x, @xs), nil()) , dequeue#3^#(::(@x, @xs)) -> dequeue#4^#(copyover(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue^#(@dequeue@3, @dequeue@4) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We estimate the number of application of {2} by applications of Pre({2}) = {1}. Here rules are labeled as follows: DPs: { 1: copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 2: copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , 3: breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , 4: breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , 5: breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , 6: dequeue^#(@dequeue@1, @dequeue@2) -> dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)) , 7: dequeue#1^#(tuple#2(@inq, @outq)) -> dequeue#2^#(@outq, @inq) , 8: breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , 9: breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , 10: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , 11: copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , 12: dequeue#2^#(nil(), @inq) -> dequeue#3^#(@inq) , 13: dequeue#3^#(::(@x, @xs)) -> copyover^#(::(@x, @xs), nil()) , 14: dequeue#3^#(::(@x, @xs)) -> dequeue#4^#(copyover(::(@x, @xs), nil())) , 15: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue^#(@dequeue@3, @dequeue@4) , 16: startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , 17: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) } Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , dequeue^#(@dequeue@1, @dequeue@2) -> dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)) , dequeue#1^#(tuple#2(@inq, @outq)) -> dequeue#2^#(@outq, @inq) , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> dequeue#3^#(@inq) , dequeue#3^#(::(@x, @xs)) -> copyover^#(::(@x, @xs), nil()) , dequeue#3^#(::(@x, @xs)) -> dequeue#4^#(copyover(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue^#(@dequeue@3, @dequeue@4) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 3' to orient following rules strictly. DPs: { 3: breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , 11: copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , 15: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue^#(@dequeue@3, @dequeue@4) } Trs: { children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#3(nil(), @b, @x, @xs) -> nil() , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , empty(@x) -> tuple#2(nil(), nil()) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_10) = {1}, Uargs(c_11) = {1}, Uargs(c_12) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [0 1 0] [0 1 0] [1] [dequeue](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 1 0] [0 1 0] [1] [0 1 0] [0 0 0] [0] [tuple#2](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 0 0] [1 0 1] [0] [0 1 0] [1 0 1] [0] [::](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [1] [0 0 0] [0 0 0] [1] [1 0 0] [1] [breadth#4](x1) = [1 1 0] x1 + [1] [0 1 0] [1] [0] [nil] = [0] [0] [1 0 1] [1 0 0] [0] [enqueues](x1, x2) = [1 0 1] x1 + [0 1 0] x2 + [0] [0 1 0] [0 0 1] [0] [0 1 0] [0 1 0] [0 0 0] [0 0 1] [0] [tuple#4](x1, x2, x3, x4) = [0 0 0] x1 + [0 0 0] x2 + [0 1 0] x3 + [0 0 0] x4 + [0] [0 0 1] [0 0 1] [1 0 0] [1 0 0] [0] [0 1 0] [0 1 0] [0 0 0] [0 0 0] [1] [children](x1, x2, x3, x4) = [0 1 0] x1 + [0 1 0] x2 + [0 1 0] x3 + [0 0 1] x4 + [0] [0 0 0] [0 0 0] [0 1 0] [0 0 0] [1] [0 1 0] [0 0 0] [0] [children#1](x1, x2, x3) = [0 1 0] x1 + [0 0 1] x3 + [0] [0 0 0] [0 0 0] [1] [0 0 0] [0 0 0] [0 1 0] [1] [children#3](x1, x2, x3, x4) = [0 0 1] x1 + [0 1 0] x3 + [0 1 0] x4 + [1] [0 0 0] [0 0 0] [0 0 0] [1] [0 0 0] [0] [children#2](x1, x2) = [0 0 1] x1 + [0] [0 0 0] [1] [0 0 0] [0 0 0] [0] [copyover](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 1 0] [1 0 1] [1] [0 0 0] [0] [copyover#1](x1) = [0 1 0] x1 + [0] [1 0 1] [1] [0 0 0] [0 0 0] [0] [copyover#2](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 1 0] [1 0 1] [1] [0 1 0] [1] [dequeue#1](x1) = [0 1 0] x1 + [0] [0 1 0] [1] [0 1 0] [0 1 0] [1] [dequeue#2](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [0] [0 1 0] [0 1 0] [1] [0 1 0] [1] [dequeue#3](x1) = [0 1 0] x1 + [0] [0 1 0] [1] [1 1 0] [1] [dequeue#4](x1) = [0 1 0] x1 + [0] [1 1 0] [1] [1] [empty](x1) = [0] [1] [0 1 0] [1 0 0] [1] [enqueue](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [1] [0 1 0] [0 0 1] [1] [1 0 0] [0 1 0] [1] [enqueue#1](x1, x2) = [0 1 0] x1 + [0 1 0] x2 + [1] [0 0 1] [0 0 0] [1] [1 0 1] [1 0 0] [0] [enqueues#1](x1, x2) = [1 0 1] x1 + [0 1 0] x2 + [0] [0 1 0] [0 0 1] [0] [0] [#unit] = [0] [0] [0 1 0] [0 1 0] [1] [breadth^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [1] [0 1 0] [1] [breadth#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [1] [0 1 0] [0] [dequeue^#](x1, x2) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [dequeue#1^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0 1 0] [0 1 0] [1] [breadth#2^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [1] [0 0 1] [0 1 0] [1] [breadth#3^#](x1, x2) = [0 0 0] x1 + [0 0 0] x2 + [0] [0 0 0] [0 0 0] [1] [0] [breadth#4^#](x1) = [0] [0] [0] [children^#](x1, x2, x3, x4) = [0] [0] [0 1 0] [1] [breadth#5^#](x1) = [0 0 0] x1 + [0] [0 0 0] [1] [0] [enqueues^#](x1, x2) = [0] [0] [0] [enqueues#1^#](x1, x2) = [0] [0] [0] [children#1^#](x1, x2, x3) = [0] [0] [0] [children#3^#](x1, x2, x3, x4) = [0] [0] [0] [children#2^#](x1, x2) = [0] [0] [0 1 0] [0] [copyover^#](x1, x2) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [copyover#1^#](x1) = [0 0 0] x1 + [0] [1 1 0] [0] [0 1 0] [0] [copyover#2^#](x1, x2) = [0 0 0] x1 + [1] [0 0 0] [1] [0 1 0] [0] [dequeue#2^#](x1, x2) = [0 0 0] x2 + [0] [0 0 0] [0] [0 1 0] [0] [dequeue#3^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [1] [dequeue#4^#](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [0] [empty^#](x1) = [0] [0] [0] [enqueue^#](x1, x2) = [0] [0] [0] [enqueue#1^#](x1, x2) = [0] [0] [0] [startBreadth^#](x1) = [0] [0] [0 1 0] [1] [startBreadth#1^#](x1) = [0 0 0] x1 + [1] [0 0 0] [1] [0 1 0] [1] [startBreadth#2^#](x1) = [0 0 0] x1 + [0] [0 0 0] [1] [1 0 0] [0] [c_10](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 0 0] [0] [c_11](x1) = [0 0 0] x1 + [0] [0 0 0] [0] [1 1 1] [0] [c_12](x1) = [0 0 0] x1 + [0] [0 0 0] [0] This order satisfies following ordering constraints [dequeue(@dequeue@1, @dequeue@2)] = [0 1 0] [0 1 0] [1] [0 1 0] @dequeue@1 + [0 1 0] @dequeue@2 + [0] [0 1 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [1] [0 1 0] @dequeue@1 + [0 1 0] @dequeue@2 + [0] [0 1 0] [0 1 0] [1] = [dequeue#1(tuple#2(@dequeue@1, @dequeue@2))] [breadth#4(tuple#4(@children@3, = [0 1 0] [0 1 0] [0 0 @children@4, 0] [0 0 1] [1] @children@5, [0 1 0] @children@3 + [0 1 0] @children@4 + [0 1 @children@6))] 0] @children@5 + [0 0 1] @children@6 + [1] [0 0 0] [0 0 0] [0 1 0] [0 0 0] [1] >= [0 1 0] [0 1 0] [0 0 0] [0 0 0] [1] [0 1 0] @children@3 + [0 1 0] @children@4 + [0 1 0] @children@5 + [0 0 1] @children@6 + [0] [0 0 0] [0 0 0] [0 1 0] [0 0 0] [1] = [children(@children@3, @children@4, @children@5, @children@6)] [enqueues(@l, @queue)] = [1 0 1] [1 0 0] [0] [1 0 1] @l + [0 1 0] @queue + [0] [0 1 0] [0 0 1] [0] >= [1 0 1] [1 0 0] [0] [1 0 1] @l + [0 1 0] @queue + [0] [0 1 0] [0 0 1] [0] = [enqueues#1(@l, @queue)] [children(@a, @b, @l1, @l2)] = [0 1 0] [0 1 0] [0 0 0] [0 0 0] [1] [0 1 0] @a + [0 1 0] @b + [0 1 0] @l1 + [0 0 1] @l2 + [0] [0 0 0] [0 0 0] [0 1 0] [0 0 0] [1] > [0 1 0] [0 1 0] [0 0 0] [0 0 0] [0] [0 1 0] @a + [0 1 0] @b + [0 1 0] @l1 + [0 0 1] @l2 + [0] [0 0 0] [0 0 0] [0 1 0] [0 0 0] [1] = [tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2))] [children#1(::(@x, @xs), @b, @l2)] = [0 0 0] [0 1 0] [0 1 0] [1] [0 0 1] @l2 + [0 1 0] @x + [0 1 0] @xs + [1] [0 0 0] [0 0 0] [0 0 0] [1] >= [0 0 0] [0 0 0] [0 1 0] [1] [0 0 1] @l2 + [0 1 0] @x + [0 1 0] @xs + [1] [0 0 0] [0 0 0] [0 0 0] [1] = [children#3(@l2, @b, @x, @xs)] [children#1(nil(), @b, @l2)] = [0 0 0] [0] [0 0 1] @l2 + [0] [0 0 0] [1] >= [0 0 0] [0] [0 0 1] @l2 + [0] [0 0 0] [1] = [children#2(@l2, @b)] [children#3(::(@y, @ys), @b, @x, @xs)] = [0 0 0] [0 1 0] [1] [0 1 0] @x + [0 1 0] @xs + [2] [0 0 0] [0 0 0] [1] >= [0 1 0] [1] [0 1 0] @xs + [2] [0 0 0] [1] = [::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil()))] [children#3(nil(), @b, @x, @xs)] = [0 0 0] [0 1 0] [1] [0 1 0] @x + [0 1 0] @xs + [1] [0 0 0] [0 0 0] [1] > [0] [0] [0] = [nil()] [children#2(::(@y, @ys), @b)] = [0] [1] [1] >= [0] [1] [1] = [::(tuple#4(@y, @b, nil(), @ys), nil())] [children#2(nil(), @b)] = [0] [0] [1] >= [0] [0] [0] = [nil()] [copyover(@copyover@1, @copyover@2)] = [0 0 0] [0 0 0] [0] [0 1 0] @copyover@1 + [0 1 0] @copyover@2 + [0] [0 1 0] [1 0 1] [1] >= [0 0 0] [0 0 0] [0] [0 1 0] @copyover@1 + [0 1 0] @copyover@2 + [0] [0 1 0] [1 0 1] [1] = [copyover#1(tuple#2(@copyover@1, @copyover@2))] [copyover#1(tuple#2(@inq, @outq))] = [0 0 0] [0 0 0] [0] [0 1 0] @inq + [0 1 0] @outq + [0] [0 1 0] [1 0 1] [1] >= [0 0 0] [0 0 0] [0] [0 1 0] @inq + [0 1 0] @outq + [0] [0 1 0] [1 0 1] [1] = [copyover#2(@inq, @outq)] [copyover#2(::(@x, @xs), @outq)] = [0 0 0] [0 0 0] [0 0 0] [0] [0 1 0] @outq + [0 1 0] @x + [0 1 0] @xs + [1] [1 0 1] [0 1 0] [0 1 0] [2] >= [0 0 0] [0 0 0] [0 0 0] [0] [0 1 0] @outq + [0 1 0] @x + [0 1 0] @xs + [1] [1 0 1] [0 1 0] [0 1 0] [2] = [copyover(@xs, ::(@x, @outq))] [copyover#2(nil(), @outq)] = [0 0 0] [0] [0 1 0] @outq + [0] [1 0 1] [1] >= [0 0 0] [0] [0 1 0] @outq + [0] [1 0 1] [0] = [tuple#2(nil(), @outq)] [dequeue#1(tuple#2(@inq, @outq))] = [0 1 0] [0 1 0] [1] [0 1 0] @inq + [0 1 0] @outq + [0] [0 1 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [1] [0 1 0] @inq + [0 1 0] @outq + [0] [0 1 0] [0 1 0] [1] = [dequeue#2(@outq, @inq)] [dequeue#2(::(@y, @ys), @inq)] = [0 1 0] [0 1 0] [0 1 0] [2] [0 1 0] @inq + [0 1 0] @y + [0 1 0] @ys + [1] [0 1 0] [0 1 0] [0 1 0] [2] > [0 1 0] [0 0 0] [0 1 0] [0] [0 1 0] @inq + [0 1 0] @y + [0 1 0] @ys + [1] [0 0 0] [0 1 0] [0 0 0] [1] = [tuple#2(tuple#2(@inq, @ys), ::(@y, nil()))] [dequeue#2(nil(), @inq)] = [0 1 0] [1] [0 1 0] @inq + [0] [0 1 0] [1] >= [0 1 0] [1] [0 1 0] @inq + [0] [0 1 0] [1] = [dequeue#3(@inq)] [dequeue#3(::(@x, @xs))] = [0 1 0] [0 1 0] [2] [0 1 0] @x + [0 1 0] @xs + [1] [0 1 0] [0 1 0] [2] >= [0 1 0] [0 1 0] [2] [0 1 0] @x + [0 1 0] @xs + [1] [0 1 0] [0 1 0] [2] = [dequeue#4(copyover(::(@x, @xs), nil()))] [dequeue#3(nil())] = [1] [0] [1] > [0] [0] [0] = [tuple#2(tuple#2(nil(), nil()), nil())] [dequeue#4(tuple#2(@dequeue@3, @dequeue@4))] = [0 2 0] [0 1 0] [1] [0 1 0] @dequeue@3 + [0 1 0] @dequeue@4 + [0] [0 2 0] [0 1 0] [1] >= [0 1 0] [0 1 0] [1] [0 1 0] @dequeue@3 + [0 1 0] @dequeue@4 + [0] [0 1 0] [0 1 0] [1] = [dequeue(@dequeue@3, @dequeue@4)] [empty(@x)] = [1] [0] [1] > [0] [0] [0] = [tuple#2(nil(), nil())] [enqueue(@x, @queue)] = [1 0 0] [0 1 0] [1] [0 1 0] @queue + [0 1 0] @x + [1] [0 0 1] [0 1 0] [1] >= [1 0 0] [0 1 0] [1] [0 1 0] @queue + [0 1 0] @x + [1] [0 0 1] [0 0 0] [1] = [enqueue#1(@queue, @x)] [enqueue#1(tuple#2(@inq, @outq), @x)] = [0 1 0] [0 0 0] [0 1 0] [1] [0 1 0] @inq + [0 1 0] @outq + [0 1 0] @x + [1] [0 0 0] [1 0 1] [0 0 0] [1] >= [0 1 0] [0 0 0] [0 1 0] [1] [0 1 0] @inq + [0 1 0] @outq + [0 1 0] @x + [1] [0 0 0] [1 0 1] [0 0 0] [0] = [tuple#2(::(@x, @inq), @outq)] [enqueues#1(::(@x, @xs), @queue)] = [1 0 0] [0 1 0] [1 0 1] [1] [0 1 0] @queue + [0 1 0] @x + [1 0 1] @xs + [1] [0 0 1] [0 1 0] [0 1 0] [1] >= [1 0 0] [0 1 0] [1 0 1] [1] [0 1 0] @queue + [0 1 0] @x + [1 0 1] @xs + [1] [0 0 1] [0 1 0] [0 1 0] [1] = [enqueues(@xs, enqueue(@x, @queue))] [enqueues#1(nil(), @queue)] = [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] >= [1 0 0] [0] [0 1 0] @queue + [0] [0 0 1] [0] = [@queue] [breadth^#(@breadth@1, @breadth@2)] = [0 1 0] [0 1 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [1] >= [0 1 0] [0 1 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [1] = [breadth#1^#(dequeue(@breadth@1, @breadth@2))] [breadth^#(@breadth@1, @breadth@2)] = [0 1 0] [0 1 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [1] > [0 1 0] [0] [0 0 0] @breadth@1 + [0] [0 0 0] [0] = [dequeue^#(@breadth@1, @breadth@2)] [breadth#1^#(tuple#2(@queue', @elem))] = [0 1 0] [0 1 0] [1] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [1] >= [0 1 0] [0 1 0] [1] [0 0 0] @elem + [0 0 0] @queue' + [0] [0 0 0] [0 0 0] [1] = [breadth#2^#(@elem, @queue')] [dequeue^#(@dequeue@1, @dequeue@2)] = [0 1 0] [0] [0 0 0] @dequeue@1 + [0] [0 0 0] [0] >= [0 1 0] [0] [0 0 0] @dequeue@1 + [0] [0 0 0] [0] = [dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2))] [dequeue#1^#(tuple#2(@inq, @outq))] = [0 1 0] [0] [0 0 0] @inq + [0] [0 0 0] [0] >= [0 1 0] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [dequeue#2^#(@outq, @inq)] [breadth#2^#(::(@z, @_@9), @queue')] = [0 1 0] [0 1 0] [0 1 0] [2] [0 0 0] @_@9 + [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [0 0 0] [1] >= [0 1 0] [0 1 0] [2] [0 0 0] @queue' + [0 0 0] @z + [0] [0 0 0] [0 0 0] [1] = [breadth#3^#(breadth#4(@z), @queue')] [breadth#3^#(tuple#2(@x, @ys), @queue')] = [0 1 0] [1 0 1] [1] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [1] >= [0 1 0] [1 0 1] [1] [0 0 0] @queue' + [0 0 0] @ys + [0] [0 0 0] [0 0 0] [1] = [breadth#5^#(enqueues(@ys, @queue'))] [breadth#5^#(tuple#2(@breadth@7, @breadth@8))] = [0 1 0] [0 1 0] [1] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [1] >= [0 1 0] [0 1 0] [1] [0 0 0] @breadth@7 + [0 0 0] @breadth@8 + [0] [0 0 0] [0 0 0] [1] = [breadth^#(@breadth@7, @breadth@8)] [copyover^#(@copyover@1, @copyover@2)] = [0 1 0] [0] [0 0 0] @copyover@1 + [0] [0 0 0] [0] >= [0 1 0] [0] [0 0 0] @copyover@1 + [0] [0 0 0] [0] = [c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2)))] [copyover#1^#(tuple#2(@inq, @outq))] = [0 1 0] [0 0 0] [0] [0 0 0] @inq + [0 0 0] @outq + [0] [0 2 0] [0 1 0] [0] >= [0 1 0] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [c_11(copyover#2^#(@inq, @outq))] [copyover#2^#(::(@x, @xs), @outq)] = [0 1 0] [0 1 0] [1] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] > [0 1 0] [0] [0 0 0] @xs + [0] [0 0 0] [0] = [c_12(copyover^#(@xs, ::(@x, @outq)))] [dequeue#2^#(nil(), @inq)] = [0 1 0] [0] [0 0 0] @inq + [0] [0 0 0] [0] >= [0 1 0] [0] [0 0 0] @inq + [0] [0 0 0] [0] = [dequeue#3^#(@inq)] [dequeue#3^#(::(@x, @xs))] = [0 1 0] [0 1 0] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] >= [0 1 0] [0 1 0] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] = [copyover^#(::(@x, @xs), nil())] [dequeue#3^#(::(@x, @xs))] = [0 1 0] [0 1 0] [1] [0 0 0] @x + [0 0 0] @xs + [0] [0 0 0] [0 0 0] [0] >= [1] [0] [0] = [dequeue#4^#(copyover(::(@x, @xs), nil()))] [dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4))] = [0 1 0] [1] [0 0 0] @dequeue@3 + [0] [0 0 0] [0] > [0 1 0] [0] [0 0 0] @dequeue@3 + [0] [0 0 0] [0] = [dequeue^#(@dequeue@3, @dequeue@4)] [startBreadth#1^#(::(@x, @xs))] = [0 1 0] [0 1 0] [2] [0 0 0] @x + [0 0 0] @xs + [1] [0 0 0] [0 0 0] [1] >= [0 1 0] [2] [0 0 0] @xs + [0] [0 0 0] [1] = [startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit())))] [startBreadth#2^#(tuple#2(@breadth@1, @breadth@2))] = [0 1 0] [0 1 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [1] >= [0 1 0] [0 1 0] [1] [0 0 0] @breadth@1 + [0 0 0] @breadth@2 + [0] [0 0 0] [0 0 0] [1] = [breadth^#(@breadth@1, @breadth@2)] Consider the set of all dependency pairs DPs: { 1: copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , 2: breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , 3: breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , 4: breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , 5: dequeue^#(@dequeue@1, @dequeue@2) -> dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)) , 6: dequeue#1^#(tuple#2(@inq, @outq)) -> dequeue#2^#(@outq, @inq) , 7: breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , 8: breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , 9: breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , 10: copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , 11: copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , 12: dequeue#2^#(nil(), @inq) -> dequeue#3^#(@inq) , 13: dequeue#3^#(::(@x, @xs)) -> copyover^#(::(@x, @xs), nil()) , 14: dequeue#3^#(::(@x, @xs)) -> dequeue#4^#(copyover(::(@x, @xs), nil())) , 15: dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue^#(@dequeue@3, @dequeue@4) , 16: startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , 17: startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Processor 'matrix interpretation of dimension 3' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {3,11,15}. These cover all (indirect) predecessors of dependency pairs {1,3,5,6,10,11,12,13,14,15,16,17}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We apply the transformation 'removetails' on the sub-problem: Weak DPs: { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , dequeue^#(@dequeue@1, @dequeue@2) -> dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)) , dequeue#1^#(tuple#2(@inq, @outq)) -> dequeue#2^#(@outq, @inq) , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> dequeue#3^#(@inq) , dequeue#3^#(::(@x, @xs)) -> copyover^#(::(@x, @xs), nil()) , dequeue#3^#(::(@x, @xs)) -> dequeue#4^#(copyover(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue^#(@dequeue@3, @dequeue@4) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { breadth^#(@breadth@1, @breadth@2) -> breadth#1^#(dequeue(@breadth@1, @breadth@2)) , breadth^#(@breadth@1, @breadth@2) -> dequeue^#(@breadth@1, @breadth@2) , breadth#1^#(tuple#2(@queue', @elem)) -> breadth#2^#(@elem, @queue') , dequeue^#(@dequeue@1, @dequeue@2) -> dequeue#1^#(tuple#2(@dequeue@1, @dequeue@2)) , dequeue#1^#(tuple#2(@inq, @outq)) -> dequeue#2^#(@outq, @inq) , breadth#2^#(::(@z, @_@9), @queue') -> breadth#3^#(breadth#4(@z), @queue') , breadth#3^#(tuple#2(@x, @ys), @queue') -> breadth#5^#(enqueues(@ys, @queue')) , breadth#5^#(tuple#2(@breadth@7, @breadth@8)) -> breadth^#(@breadth@7, @breadth@8) , copyover^#(@copyover@1, @copyover@2) -> c_10(copyover#1^#(tuple#2(@copyover@1, @copyover@2))) , copyover#1^#(tuple#2(@inq, @outq)) -> c_11(copyover#2^#(@inq, @outq)) , copyover#2^#(::(@x, @xs), @outq) -> c_12(copyover^#(@xs, ::(@x, @outq))) , dequeue#2^#(nil(), @inq) -> dequeue#3^#(@inq) , dequeue#3^#(::(@x, @xs)) -> copyover^#(::(@x, @xs), nil()) , dequeue#3^#(::(@x, @xs)) -> dequeue#4^#(copyover(::(@x, @xs), nil())) , dequeue#4^#(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue^#(@dequeue@3, @dequeue@4) , startBreadth#1^#(::(@x, @xs)) -> startBreadth#2^#(enqueue(tuple#4(@x, @x, @xs, @xs), empty(#unit()))) , startBreadth#2^#(tuple#2(@breadth@1, @breadth@2)) -> breadth^#(@breadth@1, @breadth@2) } We apply the transformation 'usablerules' on the sub-problem: Weak Trs: { dequeue(@dequeue@1, @dequeue@2) -> dequeue#1(tuple#2(@dequeue@1, @dequeue@2)) , breadth#4(tuple#4(@children@3, @children@4, @children@5, @children@6)) -> children(@children@3, @children@4, @children@5, @children@6) , enqueues(@l, @queue) -> enqueues#1(@l, @queue) , children(@a, @b, @l1, @l2) -> tuple#2(tuple#2(@a, @b), children#1(@l1, @b, @l2)) , children#1(::(@x, @xs), @b, @l2) -> children#3(@l2, @b, @x, @xs) , children#1(nil(), @b, @l2) -> children#2(@l2, @b) , children#3(::(@y, @ys), @b, @x, @xs) -> ::(tuple#4(@x, @b, nil(), @xs), ::(tuple#4(@x, @y, @xs, @ys), nil())) , children#3(nil(), @b, @x, @xs) -> nil() , children#2(::(@y, @ys), @b) -> ::(tuple#4(@y, @b, nil(), @ys), nil()) , children#2(nil(), @b) -> nil() , copyover(@copyover@1, @copyover@2) -> copyover#1(tuple#2(@copyover@1, @copyover@2)) , copyover#1(tuple#2(@inq, @outq)) -> copyover#2(@inq, @outq) , copyover#2(::(@x, @xs), @outq) -> copyover(@xs, ::(@x, @outq)) , copyover#2(nil(), @outq) -> tuple#2(nil(), @outq) , dequeue#1(tuple#2(@inq, @outq)) -> dequeue#2(@outq, @inq) , dequeue#2(::(@y, @ys), @inq) -> tuple#2(tuple#2(@inq, @ys), ::(@y, nil())) , dequeue#2(nil(), @inq) -> dequeue#3(@inq) , dequeue#3(::(@x, @xs)) -> dequeue#4(copyover(::(@x, @xs), nil())) , dequeue#3(nil()) -> tuple#2(tuple#2(nil(), nil()), nil()) , dequeue#4(tuple#2(@dequeue@3, @dequeue@4)) -> dequeue(@dequeue@3, @dequeue@4) , empty(@x) -> tuple#2(nil(), nil()) , enqueue(@x, @queue) -> enqueue#1(@queue, @x) , enqueue#1(tuple#2(@inq, @outq), @x) -> tuple#2(::(@x, @inq), @outq) , enqueues#1(::(@x, @xs), @queue) -> enqueues(@xs, enqueue(@x, @queue)) , enqueues#1(nil(), @queue) -> @queue } StartTerms: basic terms Strategy: innermost No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded Wall-time: 49.83636s CPU-time: 156.949s Wall-time: 36.08592s CPU-time: 181.094s Wall-time: 149.068995s CPU-time: 618.753s Hurray, we answered YES(O(1),O(n^5))